iphone – 有没有委托处理UIAlertView结果的简单方法?
发布时间:2020-12-14 20:03:54 所属栏目:百科 来源:网络整理
导读:我有一个显示带有YES / NO按钮的UIAlertView的函数,它只在函数范围内使用,因此我不想实现委托以捕获用户反馈. 有没有办法知道用户点击的按钮没有实现UIAlertViewDelegate,如: [alert show];if([alert indexOfClickedButton] == indexOfYes){....} 或者像动
我有一个显示带有YES / NO按钮的UIAlertView的函数,它只在函数范围内使用,因此我不想实现委托以捕获用户反馈.
有没有办法知道用户点击的按钮没有实现UIAlertViewDelegate,如: [alert show]; if([alert indexOfClickedButton] == indexOfYes) { .... } 或者像动画中的lambda表达式 解决方法
没有办法完全避免委托,但你可以沿着这些方向创建一个包装:
@interface MyAlertViewDelegate : NSObject<UIAlertViewDelegate> typedef void (^AlertViewCompletionBlock)(NSInteger buttonIndex); @property (strong,nonatomic) AlertViewCompletionBlock callback; + (void)showAlertView:(UIAlertView *)alertView withCallback:(AlertViewCompletionBlock)callback; @end @implementation MyAlertViewDelegate @synthesize callback; - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { callback(buttonIndex); } + (void)showAlertView:(UIAlertView *)alertView withCallback:(AlertViewCompletionBlock)callback { __block MyAlertViewDelegate *delegate = [[MyAlertViewDelegate alloc] init]; alertView.delegate = delegate; delegate.callback = ^(NSInteger buttonIndex) { callback(buttonIndex); alertView.delegate = nil; delegate = nil; }; [alertView show]; } @end (假设您是ARC,如果您不使用它,则将delegate = nil更改为[delegate release].) 用法如下: UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Confirm" message:@"Yes or No?" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Yes",@"No",nil]; [MyAlertViewDelegate showAlertView:alert withCallback:^(NSInteger buttonIndex) { // code to take action depending on the value of buttonIndex }]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |