Как создать подкласс QLPreviewController и отключить кнопку "Поделиться"?
Я сделал код, как это, но он открыт QLPreviewController, но кнопка Share не была отключена. Я пробовал разные вещи, но это не сработало.
- Или вы можете предложить мне любой другой контроллер предварительного просмотра, в котором я могу отключить кнопку Share.
qlViewController = QLPreviewController ()
qlViewController.navigationItem.rightBarButtonItem = nil
- qlViewController.delegate = self
- qlViewController.dataSource = self
func numberOfPreviewItemsInPreviewController (controller: QLPreviewController) -> Int {return 1}
func previewController(controller: QLPreviewController, previewItemAtIndex index: Int) -> QLPreviewItem {
controller.navigationItem.rightBarButtonItem = nil
return fileUrlToOpen
}
2 ответа
Проверено на iOS 15, может измениться в следующих обновлениях.
QLPreviewController
теперь встраивает
UINavigationController
который затем имеет корневой контроллер со стандартным
navigationItem
что мы можем настроить.
guard let navigationItem = (aQLPreviewController.children.first as? UINavigationController)?.viewControllers.first?.navigationItem else
{
// Not iOS 15 or the QLPreviewController implementation has changed
return
}
// Do whatever you want with the navigationItem
navigationItem.rightBarButtonItem?.isEnabled = false
// or navigationItem.rightBarButtonItem = nil
Есть пример как скрыть правую кнопку поделиться
final class AttachmentQuickLookVC: QLPreviewController {
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.navigationItem.rightBarButtonItems = [UIBarButtonItem]()
}
}
Кроме того, вы можете сделать что-то вроде этого, если вы хотите настроить кнопку назад:
final class AttachmentQuickLookVC: QLPreviewController {
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
let backButton = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 35))
backButton.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
backButton.contentHorizontalAlignment = .left
backButton.setImage(UIImage(named: "ic_back"), for: .normal)
let barButton = UIBarButtonItem(customView: backButton)
self.navigationItem.leftBarButtonItems = [barButton]
self.navigationItem.hidesBackButton = true
}
}