UIAlertView runModal - PullRequest
       27

UIAlertView runModal

3 голосов
/ 08 июля 2011

Продолжение до Где находится NSAlert.h в iOS SDK?

Есть ли способ получить поведение NSAlert runModal из UIAlertView?Или из UIActionSheet?

Я планирую использовать только в отладочных сборках, поэтому меня не интересует, как он выглядит или использует недокументированную функциональность.1010 *

NSAlert является частью OS X SDK и похож на MessageBox в Win32.Это позволяет синхронно запрашивать у пользователя что-то.Вот пример:

NSAlert * myAlert=[[NSAlert alloc] init];
[myAlert setMessgeText:@"This is my alert"];
[myAlert addButtonWithTitle:@"button 1"];
[myAlert addButtonWithTitle:@"button 2"];

switch ([myAlert runModal]) {
  case NSAlertFirstButtonReturn:
    //handle first button
    break;
  case NSAlertSecondButtonReturn:
    //handle second button
    break;
}

runModal - это синхронная функция, она показывает предупреждение и ожидает ответа пользователя.Внутренне он работает с ограниченной версией цикла сообщений, но что касается остальной части моего приложения, мир остановился;нет сообщений, нет событий, ничего.

Ответы [ 2 ]

9 голосов
/ 08 июля 2011

Внутренне он запускает ограниченную версию цикла сообщений, но что касается остальной части моего приложения, мир остановился

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

UIAlertView *alert = [[UIAlertView alloc]
        initWithTitle:@"O rlly?" message:nil delegate:nil
        cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
NSRunLoop *rl = [NSRunLoop currentRunLoop];
NSDate *d;
while ([alert isVisible]) {
    d = [[NSDate alloc] init];
    [rl runUntilDate:d];
    [d release];
}
[alert release];
0 голосов
/ 08 июля 2011

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

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

...