模拟模态窗口,允许在模态窗口外部轻敲

时间:2013-01-16 00:50:22

标签: objective-c ipad

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

我目前正在使用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];

如何呈现我的navcontroller,以及我将添加手势识别器的视图?

1 个答案:

答案 0 :(得分: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,同时它在使用中)。有关信息,请参阅此处:Associative References Info

PS:你可能想选择一个更好的名字,我的“半模式”,但你明白了;)