微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 如何执行UIAlertAction的处理程序?

我正在尝试编写一个帮助类,以允许我们的应用程序同时支持UIAlertAction和UIAlertView.但是,在为UIAlertViewDelegate编写alertView:clickedButtonAtIndex:方法时,我遇到了这个问题:我看不到在UIAlertAction的处理程序块中执行代码方法.

我试图通过在称为处理程序的属性中保留一组UIAlertActions来做到这一点

@property (nonatomic,strong) NSArray *handlers;

然后实现这样的委托:

- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    UIAlertAction *action = self.handlers[buttonIndex];
    if (action.enabled)
        action.handler(action);
}

但是,没有action.handler属性,或者实际上我可以通过任何方式获取它,因为UIAlertAction标头只有:

NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertAction : NSObject <NScopying>

+ (instancetype)actionWithTitle:(Nsstring *)title style:(UIAlertActionStyle)style handler:(void (^)(UIAlertAction *action))handler;

@property (nonatomic,readonly) Nsstring *title;
@property (nonatomic,readonly) UIAlertActionStyle style;
@property (nonatomic,getter=isEnabled) BOOL enabled;

@end

是否有其他方法可以在UIAlertAction的处理程序块中执行代码

解决方法

经过一些实验,我才想到这一点.事实证明,处理程序块可以作为函数指针进行转换,并且可以执行函数指针.

像这样

//Get the UIAlertAction
UIAlertAction *action = self.handlers[buttonIndex];

//Cast the handler block into a form that we can execute
void (^someBlock)(id obj) = [action valueForKey:@"handler"];

//Execute the block
someBlock(action);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐