我写了一段代码来“做某事 - > 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的常用方法吗?
答案 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获得回调时,运行另一种方法。
这样,在用户在流程的第一部分按下警报确定后,流程的第二部分才会发生。