Is it possible to change the title of an item in an QLPreviewController?
I've already tried with:
Add
override func viewDidAppear(_ animated: Bool) {
self.navigationController?.navigationBar.topItem?.title = "Bericht"
}
But you see the title only for maybe 1/4 second.
Any ideas?
If you need to display a different title other than the lastPathComponent from your url, you can subclass QLPreviewItem and provide your own title implementing the optional property:
Instance Property Declaration:
var previewItemTitle: String? { get }
The title to display for the preview item.
If you do not implement a getter method for this property, or if your method returns nil, QuickLook examines the URL or content of the item being previewed to determine an appropriate title for display to the user. Return a non-nil value for this property to provide a custom title.
protocol QLPreviewItem : NSObjectProtocol
Description
The QLPreviewItem protocol defines properties you implement to make your application’s content visible in a QuickLook preview (QLPreviewController in iOS or QLPreviewPanel in macOS). The methods in this protocol are also declared as a category on the NSURL class. As a result, you can use NSURL objects directly as preview items—provided that you want to use the default titles of those items. A default title is the last path component of an item’s URL. If you want to supply your own preview item titles, create your own preview item objects that adopt this protocol.
First Subclass 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
}
}
Then in your controller you return the QLPreviewItem instead of the 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] }
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With