在我的UISplitViewController
中,主控制器是UINavigationController
。
在纵向模式下,只要用户向上导航(使用后退按钮),我想保持导航控制器可见。一旦选择了导航控制器的表视图中的项目,我想解除弹出窗口。
我怎样才能做到这一点?我的UITableViewController
如何知道它是否在弹出窗口内,如果是,则解雇自己?
答案 0 :(得分:20)
使主视图控制器为UISplitViewControllerDelegate
(如果尚未安装)并将其连接到UISplitViewController的delegate
插座。
在主视图控制器中创建一个UIPopoverController
变量:
// MyViewController.h
@interface MyViewController : UIViewController <UISplitViewControllerDelegate> {
UIPopoverController *popoverController;
}
@property (retain, nonatomic) UIPopoverController *popoverController;
// MyViewController.m
@synthesize popoverController;
实现以下UISplitViewControllerDelegate方法:
// Called when rotating to portrait
- (void)splitViewController:(UISplitViewController*)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)pc {
// Popover controller is visible in portrait
self.popoverController = pc;
}
// Called when rotating to landscape
- (void)splitViewController:(UISplitViewController*)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
// No popover controller in landscape view
self.popoverController = nil;
}
在主视图控制器中的自己的处理程序中(在表视图中选择导航项时调用的处理程序):
- (void)navigationControllerSelectedItem:(id)item {
// If a popover controller is visible, hide it
if (popoverController) {
[popoverController dismissPopoverAnimated:YES];
}
}
不要忘记发布该变量:
- (void)dealloc {
self.popoverController = nil;
[super dealloc];
}
希望有所帮助!
答案 1 :(得分:0)
iOS5中SplitViewController的标准iPad示例与精心设计的答案大致相同,但popoverController称为masterPopoverController。
创建属性iOS5样式作为_popoverController不起作用,因为在UIViewController.h中已经有一个带有该名称的ivar。
答案 2 :(得分:0)
IOS 6.0 SplitView模板内置了此功能。详细信息视图跟踪方向和MasterViewController弹出窗口。
只需设置detailItem,弹出窗口就会消失。甚至可以检查您是否使用相同的细节,因此不会进行页面设置和刷新工作。
self.detailViewController.detailItem = self.detailViewController.detailItem;