2011-04-19 76 views
11

在我的UISplitViewController中,主控制器是UINavigationController。 在纵向模式下,只要用户向上导航(使用后退按钮),我想保持导航控制器可见。一旦选择了导航控制器的表格视图中的项目,我想要关闭弹出窗口。 我该如何做到这一点?我的UITableViewController如何知道它是否在弹出窗口内,如果是,请自行解散?纵向UISplitViewController:如何以编程方式隐藏主Popover?

回答

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]; 
} 

希望有所帮助!

+0

嗨mkerley,我试过上面的解决方案,但它不是调用UISplitViewControllerDelegate methods.Can你能帮我吗? – Minakshi 2014-04-01 05:56:44

0

iOS5中SplitViewController的标准iPad示例与精心设计的答案大致相同,但popoverController称为masterPopoverController。

创建属性iOS5样式为_popoverController不起作用,因为那里已经有一个名为UIViewController.h的ivar。

0

IOS 6.0 SplitView模板具有此内置功能。详细信息视图会跟踪方向和MasterViewController弹出窗口。

只要设置了detailItem,popover就会在适当的时候消失。如果您使用的是相同的detaiItem,则甚至会进行检查,因此无法完成页面设置和刷新工作。

self.detailViewController.detailItem = self.detailViewController.detailItem; 
相关问题