Swift中的UIActivityViewController在iPad上崩溃

时间:2015-04-09 23:34:17

标签: ios ipad swift uiactivityviewcontroller

我在我的游戏中制作共享功能,我有代码,它在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)
}

3 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:0)

popoverPresentationController sourceView需要设置为当前视图。

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

答案 2 :(得分:0)

基于@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)