我在标签栏 Controller 中创建了一个导航项按钮。
class TabBarContoller: UITabBarController,UIPopoverPresentationControllerDelegate {
...
let languageBtn = UIBarButtonItem(title: "EN", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(Language))
// navigationItem.rightBarButtonItem = [rightButton , languageBtn]
navigationItem.setRightBarButtonItems([rightButton,languageBtn], animated: true)
我想在选中此按钮时运行此功能,这将弹出一个 View Controller :
func showLanguagePopOver(base: UIView) {
let popOverContent = self.storyboard?.instantiateViewControllerWithIdentifier("Languages")as! Languages
popOverContent.preferredContentSize = CGSizeMake(150, 150)
let nav = UINavigationController(rootViewController: popOverContent)
nav.modalPresentationStyle = .Popover
let popOver = nav.popoverPresentationController
popOver?.delegate = self
popOver?.sourceView = base
popOver?.sourceRect = base.bounds
popOver?.sourceRect = CGRect(x: 0, y: 0, width: 100, height: 25)
self.presentViewController(nav, animated: true, completion: nil)
}
我试着这样调用它:
func Language()
{
showLanguagePopOver(UIView)
}
它没有用,有什么帮助吗?
最佳答案
swift 5
let controller = UIActivityViewController(activityItems: [link], applicationActivities: nil)
if UIDevice.current.userInterfaceIdiom == .pad {
controller.popoverPresentationController?.sourceView = self.view
controller.modalPresentationStyle = .pageSheet
}
vc.present(controller, animated: true, completion: nil)
呈现 View Controller 在 iPad 版本中有所不同,它需要您分配某种源 View ,否则它会崩溃。
关于ios - (<UIPopoverPresentationController : 0x7fdb10687050>) should have a non-nil sourceView or barButtonItem set before the presentation occurs. ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41714750/