UIAlertView +模态视图控制器不起作用

时间:2011-09-15 21:49:36

标签: iphone ios uialertview modalviewcontroller

我有一个UIAlertView,它有“OK”和“Cancel”按钮。我想在按下OK按钮时显示模态视图控制器。以下是我到目前为止所做的事情:

  1. 创建了UIAlertView框。实现了UIAlertViewDelegate协议。已实施(void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex方法。
  2. 在上面的方法中,当buttonIndex == 0时,我正在尝试做一些事情:

    if (buttonIndex == 0)
    {
        ModalViewController *mdvc = [[[ModalViewController alloc] initWithNibName:nil bundle:nil] autorelease];
        [self presentModalViewController:mdvc animated:YES];
    }
    
  3. 事实证明,模态视图不会出现。我尝试了很多其他的方法,但它们只是让它变得复杂,让我创造了许多不必要的变量。必须有一种更简单的方法。

    一些额外信息:

    1. 无论如何,这是一个OpenGL ES应用程序。
    2. 如果我在UIButton按下时调用[self presentModalController:],它会按预期工作 - 我看到模态视图控制器。

4 个答案:

答案 0 :(得分:5)

我也有这个问题。似乎很明显,警报必须在模态出现之前消失,因此您正在寻找一种方法来了解警报消失。略读文档,有一个简单的方法。

而不是在调用它时显示你的模态:

- (void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex

使用:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

这对我来说就像一个魅力。来自文档:

  

在动画结束且视图为之后调用此方法   隐藏。

答案 1 :(得分:1)

好吧......所以我自己解决了这个问题。正如我所说,这是在OpenGL ES应用程序中,因此我设置了一些全局bool并在drawFrame方法中调用[self presentModalViewController]。我知道,这绝对不是最好的方法,但在我所处的时间紧迫中,似乎没有更好的解决方案!

问题肯定与延迟有关,但performSelector:withObject:afterDelay似乎不够!

答案 2 :(得分:0)

首先,将该代码移动到名为presentModal:

的新方法
- (void)presentModal:(UIViewController *)mvc {
    [self presentModalViewController:mvc animated:YES];
}


然后,在您处理来自UIAlertView的响应的方法中,调用此新方法,如此

ModalViewController *mdvc = [[[ModalViewController alloc] 
                                           initWithNibName:nil 
                                                    bundle:nil] autorelease];
[self performSelector:@selector(presentModal:) 
           withObject:mdvc 
           afterDelay:0.0];


这将推迟presentModal:方法的执行,直到处理UIAlertView的方法返回之后,以及从屏幕上删除UIAlertView之后。

答案 3 :(得分:0)

“取消”按钮的索引为0,“确定”按钮的索引为1.您确定要对正确的按钮索引执行操作吗? (即如果按'取消',它会显示模态吗?)。