iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 有没有委托处理UIAlertView结果的简单方法?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个显示带有YES / NO按钮的UIAlertView的函数,它只在函数范围内使用,因此我不想实现委托以捕获用户反馈. 有没有办法知道用户点击的按钮没有实现UIAlertViewDelegate,如: [alert show]; if([alert indexOfClickedButton] == indexOfYes) { .... } 或者像动画中的lambda表达式 没有办法完全避免委
我有一个显示带有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
}];
@H_489_47@

大佬总结

以上是大佬教程为你收集整理的iphone – 有没有委托处理UIAlertView结果的简单方法?全部内容,希望文章能够帮你解决iphone – 有没有委托处理UIAlertView结果的简单方法?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。