我有一个UIAlertView,它有“OK”和“Cancel”按钮。我想在按下OK
按钮时显示模态视图控制器。以下是我到目前为止所做的事情:
(void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex
方法。在上面的方法中,当buttonIndex == 0
时,我正在尝试做一些事情:
if (buttonIndex == 0)
{
ModalViewController *mdvc = [[[ModalViewController alloc] initWithNibName:nil bundle:nil] autorelease];
[self presentModalViewController:mdvc animated:YES];
}
事实证明,模态视图不会出现。我尝试了很多其他的方法,但它们只是让它变得复杂,让我创造了许多不必要的变量。必须有一种更简单的方法。
一些额外信息:
答案 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.您确定要对正确的按钮索引执行操作吗? (即如果按'取消',它会显示模态吗?)。