gpt4 book ai didi

iphone - 有没有简单的方法来处理 UIAlertView 结果而无需委托(delegate)?

转载 作者:可可西里 更新时间:2023-11-01 03:03:43 24 4
gpt4 key购买 nike

我有一个显示带有是/否按钮的 UIAlertView 的函数,它仅在函数范围内使用,因此我不想实现委托(delegate)来捕获用户反馈。

有没有什么方法可以知道用户在没有实现 UIAlertViewDelegate 的情况下点击了什么按钮,比如:

[alert show];
if([alert indexOfClickedButton] == indexOfYes)
{
....
}

或动画中的 lambda 表达式

最佳答案

没有办法完全避免委托(delegate),但您可以按照以下方式创建一个包装器来实现这种效果:

@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
}];

关于iphone - 有没有简单的方法来处理 UIAlertView 结果而无需委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com