2

仅当 iPad 处于纵向视图时选择单元格时,我想隐藏主视图控制器。因此用户将单击单元格,然后主视图控制器将消失(就像在邮件中一样)。我将在哪里以及如何做到这一点?

在此处输入图像描述

本项目开源:https ://github.com/kirkuimet/enzyme

4

3 回答 3

8

配置详细视图控制器后,您需要关闭弹出框控制器。

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;
}
于 2012-05-18T15:37:23.260 回答
0

获取注册以获取有关您详细视图的通知。

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

}
于 2012-08-07T14:55:10.060 回答
-1

您可以通过使用自定义的 SplitViewController 来实现这一点,例如 Matt Gemmell 的MGSplitViewController。特别是,此实现toggleMasterView:向控制器添加了一个方法,您可以从内部调用该方法didSelectRowAtIndexPath:

于 2012-04-28T17:54:56.673 回答