【问题标题】:QLPreviewController change title?QLPreviewController 更改标题?
【发布时间】:2021-11-11 23:28:41
【问题描述】:

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

我已经尝试过:

  1. 子类化 QLPreviewController
  2. 添加

    override func viewDidAppear(_ animated: Bool) {
      self.navigationController?.navigationBar.topItem?.title = "Bericht"
    }
    

但你只看到标题可能只有 1/4 秒。

有什么想法吗?

【问题讨论】:

  • 如何在不重命名文件的情况下重命名 url?

标签: ios swift


【解决方案1】:

如果您需要在您的 url 中显示除 lastPathComponent 之外的其他标题,您可以将 QLPreviewItem 子类化并提供您自己的标题来实现可选属性:

实例属性声明:

var previewItemTitle: String? { get }

为预览项目显示的标题。

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


 protocol QLPreviewItem : NSObjectProtocol

说明

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

第一个子类 QLPreviewItem:

import UIKit
import QuickLook
class PreviewItem: NSObject, QLPreviewItem {
    var previewItemURL: URL?
    var previewItemTitle: String?
    init(url: URL? = nil, title: String? = nil) {
        previewItemURL = url
        previewItemTitle = title
    }
}

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

Xcode 11 • Swift 5.1

import UIKit
import QuickLook

class ViewController: UIViewController, QLPreviewControllerDelegate, QLPreviewControllerDataSource {

    var previewItems: [PreviewItem] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        previewItems = [
            .init(url: Bundle.main.url(forResource: "your file 1", withExtension: "ext"),
                  title: "Custom Title 1"),
            .init(url: Bundle.main.url(forResource: "your file 2", withExtension: "ext"),
                  title: "Custom Title 2"),
        ]
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        quickLook()
    }

    func numberOfPreviewItems(in controller: QLPreviewController) -> Int { previewItems.count }

    func quickLook(at index: Int = 0) {
        let controller = QLPreviewController()
        controller.delegate = self
        controller.dataSource = self
        controller.currentPreviewItemIndex = index
        present(controller, animated: true)
    }

    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem { previewItems[index] }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多