2

У меня есть UIActivityViewController для кнопки совместного доступа. Для iPhone у меня это как обычный UIActivityViewController и для iPad его в PopOverViewController. Это код, у меня есть для негоUIActivityViewController в PopOverViewController Crashing in Swift

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) 

    if let popUpVC = activityVC.popoverPresentationController { 
     popUpVC.permittedArrowDirections = .Any 
     popUpVC.sourceRect = share.frame 
    } 
    self.view?.window?.rootViewController?.presentViewController(activityVC, animated: true, completion: nil) 
} 

При нажатии на кнопку Отправить на IPad он просто падает с (lldb). Но когда я его представляю из вида, он работает, но не находится в правильном положении. Это код, который я использую в настоящее время из представления.

popUpVC.sourceView = self.view 

ответ

2

Попробуйте это, вы должны проверить, если устройство, которое в настоящее время работает на откликаешься на popoverPresentationController, потому что popoverPresentationController является новым для прошивки 8 и врезаться на прошивке 7. Она также будет нолем на iPhone, потому что это только в UIPopover на iPad.

let activityViewController = UIActivityViewController(activityItems: [myText, myUrl], applicationActivities: nil) 

if activityViewController.respondsToSelector("popoverPresentationController") { 
    // iOS8+ 
    view.presentViewController(activityViewController, animated: true, completion: nil) 
    activityViewController.popoverPresentationController?.sourceView = view 
} else { 
    view.presentViewController(activityViewController, animated: true, completion: nil) 
} 
+0

как бы я использовать sourceRect вместо зрения, потому что я использую это и он выходит из строя activityViewController.popoverPresentationController? .sourceRect = share.frame – Loanb222