【问题标题】:UIActivityViewController in Swift Crashes on iPadSwift 中的 UIActivityViewController 在 iPad 上崩溃
【发布时间】:2015-06-15 13:08:58
【问题描述】:

我正在我的游戏中创建一个共享功能,并且我有代码并且它在 iPhone 上运行良好,但是当我在 iPad 上测试它时,当我点击共享按钮时,应用程序崩溃了。我正在为分享按钮使用以下代码

let textToShare = "Check out this website!"

if let myWebsite = NSURL(string: "http://www.apple.com/") {
   let objectsToShare = [textToShare, myWebsite]
   let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
   self.view?.window?.rootViewController?.presentViewController(activityVC, animated: true, completion: nil)
}

【问题讨论】:

  • 不要只说“应用程序崩溃”。它在崩溃时会告诉您重要的信息。它告诉你什么重要的东西?
  • 提供有关崩溃的详细信息。

标签: ios ipad swift uiactivityviewcontroller


【解决方案1】:

UIActivityViewController 在 iPad 上运行时具有非空 popoverPresentationController 属性。所以,试试下面。

if let wPPC = activityVC.popoverPresentationController {
    wPPC.sourceView = some view
    //  or
    wPPC.barButtonItem = some bar button item
}
presentViewController( activityVC, animated: true, completion: nil )

【讨论】:

  • 如何更改弹出视图的位置
  • 谢谢,“.barButtonItem = some bar button item”真是个好办法。
  • 仅供参考,这里不需要if let。可选的链接将起作用。 activityVC.popoverPresentationController?.barButtonItem = whatever
【解决方案2】:

以@Satachito 的回答为基础:作为sourceView,您可以在弹出窗口应指向的位置创建(不可见)CGRect,并将箭头设置为该方向:

let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

if UIDevice.current.userInterfaceIdiom == .pad {
    activityVC.popoverPresentationController?.sourceView = UIApplication.shared.windows.first
    activityVC.popoverPresentationController?.sourceRect = CGRect(x: 0, y: 0, width: 300, height: 350)
    activityVC.popoverPresentationController?.permittedArrowDirections = [.left]
}

UIApplication.shared.windows.first?.rootViewController?.present(activityVC, animated: true, completion: nil)

【讨论】:

    【解决方案3】:

    popoverPresentationControllersourceView 需要设置为当前视图。

    let activityVC = UIActivityViewController(activityItems: [quoteController.attributedString, view.screenShot()], applicationActivities: [])
        
    present(activityVC, animated: true)
    activityVC.popoverPresentationController?.sourceView = view
    
    

    【讨论】:

    • 我在尝试此解决方案时收到错误“无法在范围内找到视图”。
    猜你喜欢
    • 2014-10-27
    • 2016-02-29
    • 2015-06-16
    • 2015-04-29
    • 1970-01-01
    • 2015-04-17
    • 2012-11-26
    • 2011-04-29
    • 1970-01-01
    相关资源
    最近更新 更多