2015-12-17 4 views
1

Я использую экземпляр UIDocumentInteractionController, чтобы предложить пользователю возможность открыть данный документ, если на устройстве установлено соответствующее приложение.UIDocumentInteractionController - Показать опцию «Быстрый просмотр»

Apple's documentation for the QuickLook Framework упоминает, что:

Для отображения Quick Look контроллера предварительного просмотра, вы можете использовать любого из этих вариантов:

  • задвиньте его в поле зрения, используя объект UINavigationController.
  • Представьте, что это модально, полноэкранный режим, используя текущий методModalViewController: анимированный: метод его родительского класса, UIViewController.
  • Present контроллер взаимодействия документов (как описано в предпросмотра и открытия файлов. Затем пользователь может вызвать Быстрый контроллер Смотри просмотр, выбрав Quick Look из меню настроек контроллера взаимодействия можно документа.

(курсив моего)

Я выбираю этот третий вариант: Вместо того, чтобы использовать QLPreviewController, я представляю UIDocumentInteractionController; это мой код:

@IBAction func openDocument(sender: AnyObject) { 

    let interactionController = UIDocumentInteractionController(URL: documentURL) 
    interactionController.delegate = self 

    // First, attempt to show the "Open with... (app)" menu. Will fail and 
    // do nothing if no app is present that can open the specified document 
    // type. 

    let result = interactionController.presentOpenInMenuFromRect(
     self.view.frame, 
     inView: self.view, 
     animated: true 
    ) 

    if result == false { 
     // Fall back to options view: 

     interactionController.presentOptionsMenuFromRect(
      self.view.frame, 
      inView: self.view, 
      animated: true) 
    } 
} 

Путь отступления запускается на выполнение (меню опций), потому что у меня нет какого-либо приложения, которое может открыть DOCX. Однако вариант упоминается "Quick Look" нет:

enter image description here

Что мне не хватает?


Примечание: Я не осуществляет какой-либо из методов UIDocumentInteractionControllerDelegate.

ответ

1

Глупый я ... еще раз.

ОТВЕТ: Оказывается, что, чтобы иметь возможность QuickLook присутствует, вам нужно реализовать этот метод протокола делегата:.

func documentInteractionControllerViewControllerForPreview(controller: UIDocumentInteractionController) -> UIViewController { 
    return self // returning self seems to work 
} 

(я как-то пропустил это на первое read, я думал, что реализация этого метода означает, что я должен вернуть контроллер представления, способный отображать контент - полноценный рендеринг docx, в этом случае. Он просто запрашивает «источник», из которого следует показать предварительный просмотр).

После того, как я осуществил этот метод, в меню параметров появилась кнопка глаза.

Но при нажатии на нее мое приложение потерпит крах: к моменту запуска быстрого просмотра, UIDocumentInteractionController был освобожден.Я изменил его с локальной переменной на свойство, и теперь он работает.

Смежные вопросы