现在XCode 6和iOS 8启用了大小类,所有设备只有一个故事板。精细。 但与此同时,Apple建议避免使用条形按钮项来消除弹出窗口。 现在,如何在iPhone上展示UIBarButtonItem,而不是在iPad上的popover中展示?
精确:我知道如何根据设备是iPad来禁用UIBarButtonItem。我正在寻找一种专门检测弹出窗口的方法。
编辑:这段代码有效,但我喜欢不依赖于设备的东西:if traitCollection.userInterfaceIdiom == .Pad {
navigationItem.rightBarButtonItem = nil
}
编辑:我创建了一个小型Github项目,以明确我的问题:
Github - Test Popover
谢谢!
答案 0 :(得分:1)
你现在可能已经解决了这个问题,但我发现这有效:
if (self.popoverPresentationController.presentingViewController.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) {
// hide bar button item
} else {
// show bar button item
}
答案 1 :(得分:1)
我终于找到了解决这个问题的方法:
PrepareForSegue:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
// switch on the segue.identifier
// ....
case .DisplayPreferences:
print("Segue to Preferences")
if let popoverPresentationController = segue.destinationViewController.popoverPresentationController {
popoverPresentationController.delegate = self
}
// ....
}
UIPopoverPresentationControllerDelegate:
// MARK: - UIPopoverPresentationController Delegate methods
extension StockListTableViewController: UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return .FullScreen
}
func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
if let navigationVC = controller.presentedViewController as? UINavigationController,
let preferencesVC = navigationVC.visibleViewController as? PreferencesTableViewController {
// This Bool indicates whether the popover controller should display the bar button item or not
preferencesVC.shouldShowCloseButton = true
}
return controller.presentedViewController
}
}
属性:
var shouldShowCloseButton = false
viewDidLoad中:
override func viewDidLoad() {
super.viewDidLoad()
// Close button
if shouldShowCloseButton {
let closeButton = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: #selector(PreferencesTableViewController.doneButtonTapped(_:)))
navigationItem.setRightBarButtonItem(closeButton, animated: true)
}
}
doneButtonTapped:
func doneButtonTapped(sender: UIBarButtonItem) {
navigationController?.dismissViewControllerAnimated(true, completion: nil)
}
对我而言,这完美无缺:
在iPhone上,我得到了一个以模态方式呈现的视图控制器,其中包含"关闭" 导航控制器中的按钮项,允许我将其关闭
,我得到一个没有"关闭"按钮因为有一个popover th预期的行为是在popover外面点击 解雇它。