Войти
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

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

1 апр. 2011

#2

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

1 апр. 2011

#3

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

1 апр. 2011

#4

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

1 апр. 2011

#5

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

1 апр. 2011

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

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