Войти
iPhoneСтатьиПрограммированиеПрограммирование

MessageBox в iOS

Автор:

Некоторым программистам под iOS не хватает модального сообщения как MessageBox() в WinAPI. UIAlertView подобную возможность может предоставить путем использования private API (property BOOL runsModal), но существует и «легальный» метод. Для этого требуется всего лишь создать класс-потомок от UIAlertView и переопределить метод -(void)show;

- (void)show {
    [super show];
    while(self.visible) {
        CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.02, TRUE);
    }
}

Данный код создает второй цикл обработки сообщений, который будет работать пока диалоговое окно отображается на экране.

Развивая мысль дальше, можно сделать что-то подобное:

@interface iOSMessageBox : UIAlertView<UIAlertViewDelegate> {
}

@property (nonatomic, assign) NSInteger returnValue;
- (NSInteger)showModal;

@end

@implementation iOSMessageBox

@synthesize returnValue = _returnValue;

- (NSInteger)showModal {
    [super show];
    while(self.visible) {
        CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.02, TRUE);
    }
    return self.returnValue;
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    self.returnValue = buttonIndex;
}

@end

#iOS, #подсказки

31 марта 2011

Комментарии [5]

#1
0:12, 1 апр. 2011

А за вот это отдельное огромное спасибо! Давно хотел чего-то подобного.

#2
4:06, 1 апр. 2011

Как один из тех несчастных, кому пришлось по долгу службы столкнуться с программированием яблок, и кто пытался вывести этот самый меседж бокс, посылаю лучи ненависти в отдел разработки ябло-ос, разрази их джобс ;)

#3
8:19, 1 апр. 2011

Чем не устраивает UIAlertViewDelegate? Конечно мороки больше, но в целом ничего страшного нет.

#4
10:49, 1 апр. 2011

В моем случае нужен был  int MessageBox(const char*, const char*);

#5
10:53, 1 апр. 2011

В любом случае - спасибо за подсказку!

iPhoneСтатьиПрограммированиеПрограммирование

Тема в архиве.