Я понятия не имею, что такое MessageDlg()
, но вы, безусловно, можете подкласс UIAlertView
и обрабатывать ответ диалога, основанный на том, какая кнопка нажата, например:
Настройка заголовка подкласса UIAlertView
:
//
// ARReachabilityAlertView.h
//
#import <UIKit/UIKit.h>
@interface ARReachabilityAlertView : UIAlertView <UIAlertViewDelegate> {
}
@end
Настройка реализации подкласса UIAlertView
:
//
// ARReachabilityAlertView.m
//
#import "ARReachabilityAlertView.h"
@implementation ARReachabilityAlertView
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self setTitle:@"Error"];
[self setMessage:@"This application won't run without a network connection. Do you want to quit?"];
[self addButtonWithTitle:@"Quit"];
[self addButtonWithTitle:@"Continue"];
[self setDelegate:self];
}
return self;
}
- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0)
exit(0); // quit application if "Quit" is pressed; otherwise, do nothing
}
- (void) drawRect:(CGRect)rect {
[super drawRect:rect];
}
- (void) dealloc {
[super dealloc];
}
@end
Обратите внимание на метод делегата alertView:clickedButtonAtIndex:
. Это обрабатывает условия, которые вы используете, чтобы решить, как будет работать приложение. Вы можете отправить NSNotification
отсюда или вызвать метод в делегате приложения, как хотите.
В моем примере это UIAlertView
создается, если нет сетевого подключения, и приложение закрывается, если пользователь нажимает «Выход» в представлении предупреждений. В противном случае, если пользователь нажимает «Продолжить», приложение продолжает работать как обычно.
Обратите внимание, что реализация подкласса требует вызова метода drawRect:
. Я не уверен, является ли это ошибкой или нет, так как я ожидал, что метод drawRect:
будет вызван в суперклассе; Я подал в Apple отчет об ошибке, но ничего не слышал. Прокомментируйте это, если хотите увидеть, каким будет эффект - это довольно интересно.