Как создать подкласс 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
    }
}
Другие вопросы по тегам