【发布时间】:2012-05-09 02:30:46
【问题描述】:
我想在 iPad 处于纵向视图时选择单元格时隐藏主视图控制器。因此用户将单击单元格,然后主视图控制器将消失(就像在邮件中一样)。我将在哪里以及如何做到这一点?
【问题讨论】:
标签: ipad ios5 uiviewcontroller uisplitviewcontroller uistoryboard
我想在 iPad 处于纵向视图时选择单元格时隐藏主视图控制器。因此用户将单击单元格,然后主视图控制器将消失(就像在邮件中一样)。我将在哪里以及如何做到这一点?
【问题讨论】:
标签: ipad ios5 uiviewcontroller uisplitviewcontroller uistoryboard
配置详细视图控制器后,您需要关闭弹出框控制器。
if (self.popoverController) {
[self.popoverController dismissPopoverAnimated:YES];
}
如果您的详细视图控制器还没有保存UIPopoverController 的属性,您可以通过为UISplitViewControllerDelegate 实现这些委托方法来捕获它
- (void)splitViewController:(UISplitViewController *)iSplitViewController
willHideViewController:(UIViewController *)iViewController
withBarButtonItem:(UIBarButtonItem *)iBarButtonItem
forPopoverController:(UIPopoverController *)iPopoverController {
self.popoverController = iPopoverController;
}
- (void)splitViewController:(UISplitViewController *)iSplitViewController
willShowViewController:(UIViewController *)iViewController
invalidatingBarButtonItem:(UIBarButtonItem *)iBarButtonItem {
self.popoverController = nil;
}
【讨论】:
注册以获取有关您详细视图的通知。
1)在您的详细视图上注册以获取通知。
- (void) viewDidLoad
{
//for showing loginview
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(dismissPop) name:@"MASTERROWSELECTED" object:nil];
}
2) 在 didSelectRowAtIndexPath 的主视图上执行此操作;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//do normal things you usually do
//post notification that row is selected and you need to dismiss popover.
[[NSNotificationCenter defaultCenter] postNotificationName:@"MASTERROWSELECTED"
object:nil];
}
3) 在您的详细视图上编写此方法。
- (void)dismissPop
{
if(self.interfaceOrientation == UIInterfaceOrientationPortrait)
{
//self.popover is your reference to master view pop
if([self.popover isPopoverVisible])
{
[self.popover dismissPopoverAnimated:YES];
}
}
}
【讨论】:
您可以使用自定义的 SplitViewController 来实现这一点,例如 Matt Gemmell 的 MGSplitViewController。特别是,此实现向控制器添加了一个toggleMasterView: 方法,您可以从didSelectRowAtIndexPath: 中调用该方法。
【讨论】:
MGSplitViewController 不是 UISplitViewController 的后代,所以你不能使用拆分视图控制器布局和交互故事板。您必须以编程方式管理所有这些。