我正在尝试开发适用于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。
我不想创建一些自定义视图和/或动画或自定义弹出窗口来实现此目的。任何人都可以帮助我吗?
答案 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: ...]
}