• 【转】iPhone 模态对话框 立即返回结果


    原文:http://blog.csdn.net/xianpengliu/article/details/6591624 

    iPhone中的UIAlertView用于显示一个模态对话框

    显示时设置代理delegate,当用户点击对话框中按钮时,系统将会调用delegate的函数

    从而使得程序可以根据用户的选择进行相应的处理

    这里使用了代理模式,虽然代理模式在ios的设计中有很多优雅的地方

    但是这里,用在返回模态对话框的结果,未免有点儿不合时宜

    每次用到这个,我就非常怀念MFC中的模态对话框:

    1. ReturnValue ret = dlg.doModal();  
    2. if (ret == x) {  
    3.     ...  
    4. else {  
    5.     ...  
    6. }  

    下面,封装一个类来实现这种简介的操作(代码摘自《iPhone开发秘籍》):

    1. #import <UIKit/UIKit.h>  
    2.   
    3. @interface ModalAlert : NSObject  
    4. + (BOOL) ask: (NSString *) question;  
    5. + (BOOL) confirm:(NSString *) statement;  
    6. @end  
    1. #import "ModalAlert.h"  
    2.   
    3. @interface ModalAlertDelegate : NSObject <UIAlertViewDelegate>  
    4. {  
    5.     CFRunLoopRef currentLoop;  
    6.     NSUInteger index;  
    7. }  
    8. @property (readonly) NSUInteger index;  
    9. @end  
    10.   
    11. @implementation ModalAlertDelegate  
    12. @synthesize index;  
    13.   
    14. // Initialize with the supplied run loop  
    15. -(id) initWithRunLoop: (CFRunLoopRef)runLoop   
    16. {  
    17.     if (self = [super init]) currentLoop = runLoop;  
    18.     return self;  
    19. }  
    20.   
    21. // User pressed button. Retrieve results  
    22. -(void) alertView: (UIAlertView*)aView clickedButtonAtIndex: (NSInteger)anIndex   
    23. {  
    24.     index = anIndex;  
    25.     CFRunLoopStop(currentLoop);  
    26. }  
    27. @end  
    28.   
    29. @implementation ModalAlert  
    30. +(NSUInteger) queryWith: (NSString *)question button1: (NSString *)button1 button2: (NSString *)button2  
    31. {  
    32.     CFRunLoopRef currentLoop = CFRunLoopGetCurrent();  
    33.       
    34.     // Create Alert  
    35.     ModalAlertDelegate *madelegate = [[ModalAlertDelegate alloc] initWithRunLoop:currentLoop];  
    36.     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:question message:nil delegate:madelegate cancelButtonTitle:button1 otherButtonTitles:button2, nil];  
    37.     [alertView show];  
    38.       
    39.     // Wait for response  
    40.     CFRunLoopRun();  
    41.       
    42.     // Retrieve answer  
    43.     NSUInteger answer = madelegate.index;  
    44.     [alertView release];  
    45.     [madelegate release];  
    46.     return answer;  
    47. }  
    48.   
    49. + (BOOL) ask: (NSString *) question  
    50. {  
    51.     return  [ModalAlert queryWith:question button1: @"No" button2: @"Yes"];  
    52. }  
    53.   
    54. + (BOOL) confirm: (NSString *) statement  
    55. {  
    56.     return  [ModalAlert queryWith:statement button1: @"Cancel" button2: @"OK"];  
    57. }  
    58. @end  
    这样,就可以使用一行代码显示模态对话框并获得返回值了:

    1. NSUInteger answer = [ModalAlert ask:@"Are you sure?"];  
  • 相关阅读:
    linux引导系统
    Android开发面试经——2.常见Android基础笔试题
    Android开发面试经——1.常见人事面试问题
    Android面试题整理【转载】
    android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决
    Android软键盘弹出时把布局顶上去的解决方法
    Android入门:绑定本地服务
    Android aidl Binder框架浅析
    Android LayoutInflater深度解析 给你带来全新的认识
    Android RecyclerView 使用完全解析 体验艺术般的控件
  • 原文地址:https://www.cnblogs.com/jacktu/p/2247255.html
Copyright © 2020-2023  润新知