1

我正在使用拆分视图控制器并在主窗格中点击按钮时显示模式窗口。当用户在窗口边界之外点击时,我需要能够关闭窗口。

我目前正在使用 presentViewController,我读过它不允许在窗口外点击。

我想我需要自己展示一个视图控制器并设置一个手势识别器来处理从那里关闭...问题是,我不知道在哪里/如何展示视图控制器或将手势识别器附加到哪里一个 SVC。

我像这样设置我的视图控制器:

SearchViewController *searchViewController = [[SearchViewController alloc] initWithStyle:UITableViewStylePlain];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:searchViewController];

[navController setNavigationBarHidden:NO]; 

从那里我不知道如何在不使用 presentViewController 的情况下使视图控制器出现。我尝试了以下(分别):

[[self navigationController] addChildViewController:navController];

[self.view.window.rootViewController addChildViewController:navController];

[self.presentingViewController addChildViewController:navController];

[self.presentingViewController.presentingViewController addChildViewController:navController];

如何展示我的导航控制器,以及将手势识别器添加到哪个视图?

4

1 回答 1

2

UIPopoverViewController 将起作用。

或者,您可以将子视图控制器添加到您的 RootViewController。. (查看 UIViewController 包含的生命周期处理)。

基本上就是在你的根视图控制器中:

- (void) presentSemiModalViewController 
{
   //Tint-out the background or blur it with some effect        

    _semiModalViewController = viewController;
    //Choose the frame you'd like to use here, and an animation you'd like to use to present it
    [self.view addSubView:_semiModalViewController.view];
    [_semiModelViewController willMoveToParentViewController self];


}

如果 RootViewController 不是您的(例如 UINavigationController),您可以使用类别,但要保留 _semiModalViewController,您需要使用关联引用(即在类别中添加“属性”以在使用时存储模态 VC )。有关这方面的信息,请参见此处:关联参考信息

PS:您可能想为我的“半模态”选择一个更好的名称,但您明白了;)

于 2013-01-16T01:22:48.690 回答