我在我的代码中使用了多个UIAlertView,如下所示
-(void) myfunc
{
myAlertView1 = [[UIAlertView alloc] initWithTitle:@"Message" message:[list objectAtIndex:1] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[myAlertView1 show];
[myAlertView1 release], myAlertView1 = nil;
{
do something
}
myAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[list objectAtIndex:1] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[myAlertView show];
[myAlertView release], myAlertView = nil;
}
当我在模拟器中运行程序时
我简要地看到了myAlertView1
(消息),它没有等待单击确定按钮
然后我看到等待Ok按钮点击的myAlertView
(错误),之后我再次看到myAlertView1(消息)并等待直到单击OK按钮。
逻辑上我想查看myAlertView1
(消息)并等到单击确定按钮然后看到myAlertView
(错误)并等到按钮被单击。
我在这里错过了什么吗?
答案 0 :(得分:12)
UIAlertView
不是人们所期望的模态。在创建和展示第二个alertView:didDismissWithButtonIndex:
之前,您应该等待代表接收UIAlertView
答案 1 :(得分:0)
以下是制作对话模式的方法。
我在研究MonoTouch / C#用户的类似问题时遇到了这个问题,所以我为他写了这个样本。相同的样本可以简单地移植到Objective-C。
要做到这一点,你可以做的是手动运行mainloop。我没有设法直接停止主循环,所以我改为运行主循环0.5秒并等待用户响应。
以下函数显示了如何使用上述方法实现模态查询:
int WaitForClick ()
{
int clicked = -1;
var x = new UIAlertView ("Title", "Message", null, "Cancel", "OK", "Perhaps");
x.Show ();
bool done = false;
x.Clicked += (sender, buttonArgs) => {
Console.WriteLine ("User clicked on {0}", buttonArgs.ButtonIndex);
clicked = buttonArgs.ButtonIndex;
};
while (clicked == -1){
NSRunLoop.Current.RunUntil (NSDate.FromTimeIntervalSinceNow (0.5));
Console.WriteLine ("Waiting for another 0.5 seconds");
}
Console.WriteLine ("The user clicked {0}", clicked);
return clicked;
}
答案 2 :(得分:0)
您可以按照以下方式执行此操作:
-(void) myfunc
{
myAlertView1 = [[UIAlertView alloc] initWithTitle:@"Message" message:[listobjectAtIndex:1] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[myAlertView1 show];
[myAlertView1 release], myAlertView1 = nil;
{
do something
}
}
当你获得alertview时,你可以点击OK按钮调用另一种方法来打开另一个警报视图。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(buttonIndex==0)
{
[self open_secondAlert];
}
}
-(void)open_secondAlert
{
myAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[list objectAtIndex:1] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[myAlertView show];
[myAlertView release], myAlertView = nil;
}
如果您还有任何问题,请与我们联系。
谢谢, 最好的祝福, Gurprit