当前位置: 首页 > 面试题库 >

QLPreviewController更改标题吗?

海翔宇
2023-03-14
问题内容

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

我已经尝试过:

  1. 子类化QLPreviewController
  2. override func viewDidAppear(_ animated: Bool) {
    

    self.navigationController?.navigationBar.topItem?.title = “Bericht”
    }

但是您只会在1/4秒内看到标题。

有任何想法吗?


问题答案:

如果您需要从URL显示除lastPathComponent以外的其他标题,则可以子类QLPreviewItem并提供实现可选属性的自己的标题:

实例属性声明:

var previewItemTitle: String? { get }

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

如果您没有为此属性实现getter方法,或者您的方法返回nil,则QuickLook会检查要预览的项目的URL或内容,以确定要显示给用户的适当标题。返回此属性的非null值以提供自html" target="_blank">定义标题。

 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] }
}


 类似资料:
  • 问题内容: 这段代码可以编译,我只是无法在标题栏上更改名称。 问题答案: 如果您的课程扩展了JFrame,请使用 如果没有,并且包含一个名为myFrame的JFrame,则使用 现在,您已经发布了程序,很明显,您只需要一个JTextField即可获得新标题。这些更改将达到目的: 和: 和:

  • 从"text/html"到"Application/json"的响应的标头类型。其他然后这个 am使用as头类型作为头(“内容类型”、“应用程序/json;字符集=UTF-8”) 但不是改变。

  • 我有一个用例,我需要更改的标题。例如,我有一个餐厅单元,当向右滑动时,我显示书签(104),其中书签是动作,104表示已经有104个人给它加了书签。当点击它时,我希望它更改为书签(105),因为很明显有一个新用户(当前用户自己)已经将其加入书签。我该怎么做呢?尝试了下面的代码,它不工作。

  • 我正在尝试在Android的ActionBar上做一些事情。 我已经在操作栏的右侧添加了新项目。 如何更改操作栏的左侧?我想改变图标和文本,我想在其他屏幕的操作栏中添加一个“后退按钮

  • 我需要更改Jdialog box标题栏图标。默认情况下,它使用Java咖啡图像。 我在网上查了一下,用了很多代码 没有什么能正常工作。请你帮帮我..提前致谢

  • 是否可以更改事件接收的对象的标头? 两次尝试: > 修改现有标题: 失败,原因是。 创建新的请求对象: 失败与