2017-07-27 67 views
0

我想在線程中打開文件,這裏是我的代碼:試圖提出VC,其觀點是不是在窗口層次

DispatchQueue.main.async(execute: {() -> Void in 
    var documentsURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).appendPathComponent(「File.pdf") 
    self.docController = UIDocumentInteractionController.init(url: documentsURL as URL) 
    self.docController?.delegate = self as? UIDocumentInteractionControllerDelegate 
    self.docController?.presentPreview(animated: true) 
    self.docController?.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true) 
}) 

時,主屏幕顯示移動此警告和文件無法打開

Warning: Attempt to present <_UIDocumentActivityViewController: 0x...> on <HCM.PrintVacationDecisionVC: 0x...> whose view is not in the window hierarchy! 

任何有助於解決這個問題?

+0

'PrintVacationDecisionVC'是不可見的,所以它不能呈現'UIDocumentInteractionController'。 – Larme

+0

鏈接沒有解決我的問題,我做了很長的搜索之前發佈問題 –

回答

1

添加電子郵件xtention給予您的應用程序的波紋管,並在任何想要呈現任何視圖控制器的地方使用它,它對我有用,希望它對您有所幫助。

//MARK: - UIApplication Extension 
extension UIApplication { 
    class func topViewController(viewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { 
     if let nav = viewController as? UINavigationController { 
      return topViewController(viewController: nav.visibleViewController) 
     } 
     if let tab = viewController as? UITabBarController { 
      if let selected = tab.selectedViewController { 
       return topViewController(viewController: selected) 
      } 
     } 
     if let presented = viewController?.presentedViewController { 
      return topViewController(viewController: presented) 
     } 
     return viewController 
    } 
} 

,並按照代碼目前它:

UIApplication.topViewController()?.present(vc, animated: true, completion: nil) 
3

如果您試圖在viewDidLoad方法中呈現模態視圖控制器,可嘗試將此調用移至viewDidAppear:方法。

1

你需要找到頂部視圖控制器

https://stackoverflow.com/a/26859650/4601900

extension UIViewController { 
func topMostViewController() -> UIViewController { 
    // Handling Modal views 
    if let presentedViewController = self.presentedViewController { 
     return presentedViewController.topMostViewController() 
    } 
    // Handling UIViewController's added as subviews to some other views. 
    else { 
     for view in self.view.subviews 
     { 
      // Key property which most of us are unaware of/rarely use. 
      if let subViewController = view.nextResponder() { 
       if subViewController is UIViewController { 
        let viewController = subViewController as UIViewController 
        return viewController.topMostViewController() 
       } 
      } 
     } 
     return self 
    } 
} 
} 

extension UITabBarController { 
override func topMostViewController() -> UIViewController { 
    return self.selectedViewController!.topMostViewController() 
} 
} 

extension UINavigationController { 
override func topMostViewController() -> UIViewController { 
    return self.visibleViewController.topMostViewController() 
} 

}

如何使用

UIApplication.sharedApplication().keyWindow!.rootViewController!.topMostViewController() 
+0

當我嘗試使用的代碼有錯誤的行窗口(類型vc沒有成員窗口)和getCurrentViewController undefined –

+0

你嘗試使用AppDelegate的窗口? –

+0

您是不是要找使用的AppDelegate,而不是自我 –

相關問題