iOS實現模態對話方塊
轉載,以備不時之需
原文地址:
http://blog.csdn.net/xianpengliu/article/details/6591624
下面,封裝一個類來實現這種簡介的操作(代碼摘自《iPhone開發秘籍》):
ModalAlert.h
#import <UIKit/UIKit.h>
@interface ModalAlert : NSObject
+ (BOOL) ask: (NSString *) question;
+ (BOOL) confirm:(NSString *) statement;
@end
@interface ModalAlertDelegate : NSObject <UIAlertViewDelegate>
{
CFRunLoopRef currentLoop;
NSUInteger index;
}
@property (readonly) NSUInteger index;
@end
ModalAlert.m
#import "ModalAlert.h"
@implementation ModalAlertDelegate
@synthesize index;
// Initialize with the supplied run loop
-(id) initWithRunLoop: (CFRunLoopRef)runLoop
{
if (self = [super init]) currentLoop = runLoop;
return self;
}
// User pressed button. Retrieve results
-(void) alertView: (UIAlertView*)aView clickedButtonAtIndex: (NSInteger)anIndex
{
index = anIndex;
CFRunLoopStop(currentLoop);
}
@end
@implementation ModalAlert
+(NSUInteger) queryWith: (NSString *)question button1: (NSString *)button1 button2: (NSString *)button2
{
CFRunLoopRef currentLoop = CFRunLoopGetCurrent();
// Create Alert
ModalAlertDelegate *madelegate = [[ModalAlertDelegate alloc] initWithRunLoop:currentLoop];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:question message:nil delegate:madelegate cancelButtonTitle:button1 otherButtonTitles:button2, nil];
[alertView show];
// Wait for response
CFRunLoopRun();
// Retrieve answer
NSUInteger answer = madelegate.index;
[alertView release];
[madelegate release];
return answer;
}
+ (BOOL) ask: (NSString *) question
{
return
[ModalAlert queryWith:question button1: @"No" button2: @"Yes"];
}
+ (BOOL) confirm: (NSString *) statement
{
return
[ModalAlert queryWith:statement button1: @"Cancel" button2: @"OK"];
}
@end
用法如下:
NSUInteger answer = [ModalAlert ask:@"Are you sure?"];