当详细视图控制器可见时,从主视图控制器中删除UIBarButtonItem

时间:2014-08-07 21:05:55

标签: ios objective-c uisplitviewcontroller uibarbuttonitem size-classes

我正在将我的视图控制器转换为带有通用故事板的分割视图控制器,以同时在屏幕上显示两个视图,这两个视图仅显示在iPad上 - 只有一个在iPhone上可见。我有一种情况,UIBarButtonItem仅在屏幕上只有一个视图控制器时才有意义。当分割视图控制器中的两个视图控制器都可见时,我希望删除或隐藏此按钮。

我不能使用Size Classes来执行此操作,因为我想要删除的按钮位于主视图控制器中(实际上我在主视图和细节中都有按钮应该被删除),它不会有大小常规w常规h。 Plus Interface Builder无法提供"已安装的" UIBarButtonItem的选项,我无法检查代码中的大小类,因为该应用程序也可以在iOS 7上运行。

当主屏幕和详细视图控制器都在屏幕上时,如何删除/隐藏UIBarButtonItem或者我无法在IB中添加此按钮,然后在代码中添加它认为合适,但我怎么知道两个视图控制器是否都在屏幕上?

1 个答案:

答案 0 :(得分:1)

这是一个很好的解决方案,适用于iPhone和iPad上的iOS 8和iOS 7。您只需检测是否存在拆分视图控制器,如果存在,请检查它是否已折叠。如果它已折叠,您知道屏幕上只有一个视图控制器。知道了这些信息,你可以做任何你需要的事情。

//remove right bar button item if more than one view controller is on screen
if (self.splitViewController) {
    if ([UISplitViewController instancesRespondToSelector:@selector(isCollapsed)]) {
        if (!self.splitViewController.collapsed) {
            self.navigationController.navigationBar.topItem.rightBarButtonItem = nil;
        }
    } else {
        self.navigationController.navigationBar.topItem.rightBarButtonItem = nil;
    }
}