QLPreviewController更改标题?

时间:2017-03-27 20:30:32

标签: ios swift

是否可以更改QLPreviewController中项目的标题?

我已经尝试过:

  1. 子类化QLPreviewController
  2. 添加

    override func viewDidAppear(_ animated: Bool) {
      self.navigationController?.navigationBar.topItem?.title = "Bericht"
    }
    
  3. 但你只看到1/4秒的标题。

    有什么想法吗?

1 个答案:

答案 0 :(得分:13)

如果您需要在网址中显示除lastPathComponent之外的其他标题,您可以继承QLPreviewItem并提供实现可选属性的标题:

实例属性声明:

var previewItemTitle: String? { get }
  

要为预览项目显示的标题。

     

如果您没有为此属性实现getter方法,或者您的   方法返回nil,QuickLook检查项目的URL或内容   正在预览以确定适合显示的标题   用户。返回此属性的非零值以提供自定义   标题。

 protocol QLPreviewItem : NSObjectProtocol
  

描述

     

QLPreviewItem协议定义了您实现的属性   应用程序的内容在QuickLook预览中可见   (iOS中的QLPreviewController或macOS中的QLPreviewPanel)。方法   在此协议中也被声明为NSURL类的类别。   因此,您可以直接使用NSURL对象作为预览   items - 如果您要使用这些项的默认标题。   默认标题是项目URL的最后一个路径组件。如果你   想要提供自己的预览项目标题,创建自己的预览   采用此协议的项目对象。

第一个子类QLPreviewItem:

import UIKit
import QuickLook
class PreviewItem: NSObject, QLPreviewItem {
    var previewItemURL: URL?
    var previewItemTitle: String?
}

然后在您的控制器中返回QLPreviewItem而不是URL:

import UIKit
import QuickLook

class ViewController: UIViewController, QLPreviewControllerDelegate, QLPreviewControllerDataSource {
    let item = PreviewItem()
    override func viewDidLoad() {
        super.viewDidLoad()
        item.previewItemTitle = "Custom Title"
        item.previewItemURL = Bundle.main.url(forResource: "your file", withExtension: "ext")
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        quickLook()
    }
    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1
    }
    func quickLook() {
        let preview = QLPreviewController()
        preview.delegate = self
        preview.dataSource = self
        preview.currentPreviewItemIndex = 0
        present(preview, animated: true)
    }
    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        return  item
    }
}