UIAlertView不等待

时间:2009-05-19 10:55:28

标签: iphone objective-c

我在我的代码中使用了多个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(错误)并等到按钮被单击。 我在这里错过了什么吗?

3 个答案:

答案 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