2016-12-27 85 views
4

在Swift中,我试图通过导航栏右上角的酒吧按钮项显示弹出窗口。以下是我的代码:在iPhone的导航栏中显示从酒吧按钮弹出来

func showOptions(sender: UIBarButtonItem) { 
    let optionsVC = OptionsViewController(nibName: "OptionsViewController", bundle: nil) 
    optionsVC.delegate = self 
    optionsVC.modalPresentationStyle = .popover 
    optionsVC.preferredContentSize = CGSize(width: 200, height: 200) 

    present(optionsVC, animated: true, completion: nil) 

    let popController = optionsVC.popoverPresentationController 
    popController?.permittedArrowDirections = .up 
    popController?.delegate = self 
    popController?.barButtonItem = sender 
} 

func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { 
    return .none 
} 

它在ipad上运行良好,而不是在iPhone上。我已经通过文档和不同的网页。一切似乎都是对的。我的代码中缺少什么?

回答

6

这里唯一的问题是您在设置popover代表之前要提供OptionsViewController。所以首先设置它的委托,然后调用present函数。

let popController = optionsVC.popoverPresentationController 
popController?.permittedArrowDirections = .up 
popController?.delegate = self 
popController?.barButtonItem = sender 

present(optionsVC, animated: true, completion: nil) 
+0

非常感谢。许多博客展示了我实施的方式。 – Satyam