Ошибка в AlertView на iPhone? - PullRequest
0 голосов
/ 19 марта 2009

Я пишу кусок кода, чтобы "сделать что-то-> показать 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];

И вдруг с несколькими AlertView произошла странная вещь: на ней отображается «Alert 1» -> «Alert 2» (нажмите «OK») -> «Alert 1». Почему «Оповещение 1» снова показывает? Я еще не написал метод делегата. Может быть, ошибка? (Благодаря cobbal, alert1 все еще существует, когда появляется alert2.)

Я считаю - (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex работает хорошо. Является ли метод делегата распространенным способом отображения нескольких alertViews *

Ответы [ 3 ]

2 голосов
/ 19 марта 2009

Я предполагаю, что предупреждение 1 отображается, а затем покрывается предупреждением 2, поскольку шоу не является модальным. Когда предупреждение 2 закрыто, предупреждение 1 все еще открыто.

На ваш второй вопрос alertView:didDismissWithButtonIndex: может работать лучше, но я на самом деле не проверял это.

0 голосов
/ 19 марта 2009

Причина этого заключается в том, что UIAlertView не блокируется во время отображения. Любой код, написанный после отображения представления предупреждения, будет выполняться сразу после отображения предупреждения.

То, что вы должны иметь, это два разных метода. Один, который делает что-то, а затем показывает предупреждение, а затем другой, который делает что-то и показывает другое предупреждение.

Запустите первый метод, чтобы что-то сделать, и отобразите предупреждение, а затем подключитесь к методу делегата оповещения, а когда вы получите обратный вызов из представления оповещений, запустите другой метод.

Таким образом, вторая часть процесса не произойдет, пока пользователь не нажмет OK на предупреждении в первой части процесса.

0 голосов
/ 19 марта 2009

Делегат предназначен для того, чтобы вы могли получать уведомления, когда предупреждение отклонено, и какую кнопку использовали для его отмены. Это не влияет на то, отменено ли оповещение вообще.

Предупреждение будет оставаться видимым до тех пор, пока оно не будет отклонено либо нажатием кнопки (если таковые имеются - они не требуются), либо вызовом либо [UIAlertView dismissWithClickedButtonIndex:animated], либо (недокументированного) dismiss метода экземпляра предупреждения.

Похоже (как предложил Коббал), оповещение 2 появляется поверх оповещения 1, вы отклоняете оповещение 2, и оповещение 1 остается там (до тех пор, пока оно само не будет отклонено).

Есть ли какая-то конкретная причина, по которой вы хотите показывать новое предупреждение, пока другое все еще показывает? Возможно, какой-то дополнительный контекст поможет нам добраться до сути проблемы, которая, как я подозреваю, может быть проблемой дизайна.

[править] Возвращаясь к этому и читая еще раз, мне интересно, о чем вы спрашиваете с помощью метода делегата, должны ли вы показывать предупреждение 2 оттуда? В этом случае это, вероятно, то, что вы хотите - прямо или косвенно. Косвенным образом я имею в виду, что в другом месте может быть установлено состояние, определяющее, следует ли показывать предупреждение 2 (или обстоятельства, которые к нему ведут). Это состояние (возможно, флаг) может быть установлено, когда вы показываете первое предупреждение, и сбрасывается, когда предупреждение отклоняется (из метода делегата).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...