iOS - 显示/隐藏UISplitViewController,而不使用UIBarButtonItem的委托方法

时间:2014-08-22 12:40:34

标签: ios show-hide uisplitviewcontroller

我正在尝试开发适用于iPad的多方位应用程序。在横向模式下,MasterViewController应该始终可见,我没有任何问题。但是在portraid模式下,我必须创建一个show / hide方法。主要问题是,我不能使用

的委托方法

- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc

- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem

因为我的detailViewController不是NavigationController而不应该  是。 detailViewController也不能有NavigationItem。让我解释一下原因:

我希望我的所有页面在屏幕底部都有类似仪表板的视图。所以我永远不会改变detailViewController。在屏幕的顶部,我有一个嵌入在容器视图中的导航控制器。因此,如果您选择了一个MasterViewController的tableview项,则NavigationController的rootViewController正在更改。这就是为什么我在detailViewController中没有导航项目。

这些rootViewControllers具有按钮,这些按钮通过自定义委托方法将其状态传递给detailViewController。这种方法必须隐藏/显示masterviewcontroller。

我不想创建一些自定义视图和/或动画或自定义弹出窗口来实现此目的。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

详细信息视图控制器不需要UINavigationController委派给拆分视图。

您可以将DetailViewController设置为UISplitViewController的委托。 当拆分视图将隐藏视图(纵向)时,保存弹出窗口,稍后您可以根据需要显示该窗口。

用户可能仍然在没有任何按钮的情况下显示它 - 从屏幕左侧滑动。如果它对您的应用程序来说足够了,那么您就不需要实现委托方法。

// In App Delegate or Nib:
splitViewController.delegate = detailViewController;




// In Detail View Controller :

- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc {


    self.popoverController = pc;

    // Update ui 
    ...
 }


 - (void)splitViewController:(UISplitViewController*)svc
     willShowViewController:(UIViewController *)aViewController
  invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {

  self.popoverController = nil;
}


- (void)showMenu {
  [self.popoverController presentPopoverFromRect: ...]
}