UIAlertView не ждет - PullRequest
       22

UIAlertView не ждет

4 голосов
/ 19 мая 2009

Я использую несколько UIAlertViews в моем коде следующим образом

-(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 (Сообщение), и оно не ждет нажатия кнопки ОК. затем я вижу myAlertView (ошибка), которая ожидает нажатия кнопки Ok, и после этого я снова вижу myAlertView1 (сообщение), и он ждет, пока кнопка OK не будет нажата.

Логически я хочу увидеть myAlertView1 (Сообщение) и дождаться нажатия кнопки Ok, а затем увидеть myAlertView (Ошибка) и дождаться нажатия кнопки. Я что-то здесь упускаю?

Ответы [ 3 ]

12 голосов
/ 19 мая 2009

UIAlertView не является модальным, как можно было бы ожидать. Вам следует подождать, пока ваш делегат получит alertView:didDismissWithButtonIndex:, прежде чем создавать и показывать второй UIAlertView

0 голосов
/ 20 июня 2011

Здесь вы можете сделать это следующим образом:

-(void) myfunc
{  
    myAlertView1 = [[UIAlertView alloc] initWithTitle:@"Message" message:[listobjectAtIndex:1] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    [myAlertView1 show];
    [myAlertView1 release], myAlertView1 = nil;
    {
        do something
    }
}

И когда вы получаете предупреждение, вы можете нажать кнопку 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

0 голосов
/ 26 января 2011

Вот как вы можете сделать свой диалог модальным.

Я столкнулся с этим во время исследования аналогичного вопроса от пользователя MonoTouch / C #, поэтому я написал этот пример для него. Один и тот же образец можно легко перенести на Objective-C.

Чтобы сделать это, вы можете запустить основной цикл вручную. Мне не удалось остановить основной цикл напрямую, поэтому я вместо этого запускаю основной цикл в течение 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...