iPhone上AlertView中的错误?

时间:2009-03-19 12:12:14

标签: iphone objective-c alert

我写了一段代码来“做某事 - > show alert1->做点什么 - > show alert2”。


    //do something
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:@"Alert 1" 
                          message:nil 
                          delegate:nil 
                          cancelButtonTitle:@"OK" 
                          otherButtonTitles:nil];
    [alert show];
    [alert release];
    //do something  
    UIAlertView *alert2 = [[UIAlertView alloc] 
                           initWithTitle:@"Alert 2" 
                           message:nil 
                           delegate:nil 
                           cancelButtonTitle:@"OK" 
                           otherButtonTitles:nil];
    [alert2 show];
    [alert2 release];

多个AlertViews突然发生了一件奇怪的事情:它显示“警报1” - >“警报2”(按“确定”) - >“警报1”。为什么“警报1”再次出现?我还没有编写任何委托方法。也许是一个错误?(感谢cobbal,当alert2出现时,alert1仍然存在。)

我发现 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex效果很好。委托方法是显示多个alertView的常用方法吗?

3 个答案:

答案 0 :(得分:2)

我猜测警报1会显示,然后由警报2覆盖,因为show不是模态的。当警报2关闭时,警报1仍然打开。

对于您的第二个问题,alertView:didDismissWithButtonIndex:可能会更好,但我实际上没有测试过。

答案 1 :(得分:0)

委托是这样的,当警报被取消时,您可以收到通知,以及使用哪个按钮来解除警报。它不会影响警报是否被解雇。

警报将一直显示,直到您点击按钮(如果有的话 - 不需要它们)或您调用警报的[UIAlertView dismissWithClickedButtonIndex:animated]或(未记录的)dismiss方法来解除警报实例

看起来像(正如Cobbal建议的那样),警报2突然出现在警报1上,你关闭警报2,警报1仍在那里(直到它本身被解雇)。

是否有特殊原因要显示新警报,而另一个仍在显示?也许更多的背景可以帮助我们找到问题的根源,我怀疑这可能是一个设计问题。

[编辑]回到这里并再次阅读,我想知道你用委托方法询问的是你是否应该从那里显示警报2?在这种情况下,这可能是你想要的 - 无论是直接还是间接。间接地,我的意思是你可能在其他地方设置了一些状态,以确定是否应该显示警报2(或导致它的情况)。当您显示第一个警报时,可以设置该状态(可能是一个标志),并在取消警报时清除该状态(来自委托方法)。

答案 2 :(得分:0)

发生这种情况的原因是因为UIAlertView在显示时不会阻止。显示警报后显示的任何代码将在显示警报后直接运行。

你应该拥有两种不同的方法。一个做某事,然后显示一个警报,然后另一个做某事并显示另一个警报。

启动第一种做某事并显示警报的方法,然后挂钩到alert的委托方法,当你从alertview获得回调时,运行另一种方法。

这样,在用户在流程的第一部分按下警报确定后,流程的第二部分才会发生。