当以模态呈现时,UIViewController显示在当前视图后面

时间:2012-06-27 16:17:31

标签: iphone ios5 ios4

在iOS 5上,当我尝试使用presentModalViewController呈现来自另一个视图控制器的任何视图控制器时,模态视图显示在当前视图后面。

由于它在iOS 4上工作正常,并且知道在iOS 5中已弃用presentModalViewController,我尝试使用presentViewController但没有运气。

这是我第一次遇到这个问题,关于什么可能导致这种奇怪行为的任何想法?

3 个答案:

答案 0 :(得分:0)

我认为问题在于你没有设置正确的模态演示风格。 http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIModalPresentationStyle

此示例应在现有视图控制器的顶部触发全屏模式。

 [self setModalPresentationStyle:UIModalPresentationFullScreen];
 ViewController2 *vc = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
 [self presentViewController:vc animated:YES completion:NULL];

答案 1 :(得分:0)

不确定您是否使用按钮来显示视图控制器,但如果您这样做,这应该可以使用。在视图控制器中创建一个新功能,如下所示。这会在您的视图中实例化您的视图和导航控制器,以便之后可以将其解除。

- (void)buttonPressed {
    UIViewController *yourViewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
    UINavigationController *navigationController = [[UINavigationController] alloc] initWithRootViewController:yourViewController];
    [self presentModalViewController:navigationController animated:YES];
   }

然后在viewDidLoad中你会有这样的东西(如果你是从按钮中呈现它)。下面的代码用于UIBarButtonItem,但其他按钮应该以类似的方式工作。只需确保将action参数设置为@selector(buttonPressed),或者按下按钮时要调用的函数名称。

 self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] init]                                                                                  
target:self                                                                         
action:@selector(buttonPressed)];

答案 2 :(得分:0)

我终于找到了这个问题。由于一些尴尬的原因,根窗口的rootViewController未正确设置,导致模态视图的奇怪行为。

更令人费解的是,到目前为止它在iOS 4上运行良好并且在iOS 5上失败了。我相信我仍然错过导致此类问题的真正原因,但正确设置rootViewController在{ {1}}解决了这个问题。