Блокирование выполнения до тех пор, пока AlertView не будет отклонен пользователем и не вернет результат - PullRequest
0 голосов
/ 11 августа 2009

Как я могу заставить мой метод делегата подождать, пока пользователь не сделает выбор в отношении подтверждения предупреждения?

BOOL userChoice = FALSE;

У меня есть такой метод делегата:

-(BOOL) returnUserChoiceYESorNO:(NSString*)message { //delegate method

UIAlertView *msgBox = [[UIAlertView alloc] initWithTitle:@"Your Choice" message:message delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK",nil]; 
    [msgBox show]; 
    [msgBox release];

//// HOW CAN I MAKE IT WAIT HERE, UNTIL I RECEIVE USER Responce from ClickedButtonAtIndex?  (without using while loop or infinite loops)

return userChoice;


}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

if(buttonIndex==0) {
userChoice = NO;
else
{
userChoice = YES;
}

}

Ответы [ 3 ]

0 голосов
/ 11 августа 2009

Вы не можете без петель. Вы не должны останавливаться на достигнутом, если вообще можете этого избежать. Что вызывает ваш метод? Можно ли реструктурировать его для проверки значения позже или переписать что-нибудь, чтобы позже можно было перезвонить с ответом?

В худшем случае, возможно, вы могли бы обойти код, вызывающий вас, вывести диалоговое окно, кэшировать значение и, ТОГДА создать все условия, которые в первую очередь вызывали бы код.

Эти системы с графическим интерфейсом обычно просто не зависают, они возвращаются, и большую часть времени поток НЕ работает. Если вы начнете обходить это, вы столкнетесь со всевозможными проблемами потоков и состояний.

0 голосов
/ 22 ноября 2010

Создайте пользовательский метод, например:

-doSomething(){
//YOUR Code to perform whatever action you want to.
}

Вызовите этот метод сразу, когда пользователь нажмет на индекс 0.

(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex: 
(NSInteger)buttonIndex{
if(buttonIndex==0) {
 [self doSomething];
else
 [self doOther];
}

Нет необходимости создавать метод.

-(BOOL) returnUserChoiceYESorNO:(NSString*)message {
}

Просто добавьте метод делегата.

-clickedButtonAtIndex

Это более простой способ реализации.

0 голосов
/ 11 августа 2009

Не ждите, пока диалог вернется. Гораздо проще вызвать предупреждение, завершить свой метод, а затем подождать, пока предупреждение не вернется, прежде чем делать то, что вам нужно.

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