是否可以创建一个可以生成UIAlertAction并使用处理程序返回它的函数。
我只是不想多次为UIAlertAction编写代码,只是尝试创建单个函数,可以为每个必需的场景创建UIAlertAction。 这是我的代码。
UIAlertAction *actionPast = [self createActionButton:@"Past"];
UIAlertAction *actionFuture = [self createActionButton:@"Future"];
-(UIAlertAction *)createActionButton : (NSString *)title{
UIAlertAction *action = [UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {}];
return action;
}
所以有可能在点击任何UIAlertAction时恢复处理程序并执行任何任务。
答案 0 :(得分:1)
是的,你可以这样做。在实用程序类/共享类中创建以下方法(无论您希望它是类方法还是实例方法都取决于您):
+(UIAlertAction *) createAlertActionWithSelector:(SEL) selector andTitle:(NSString *) title andAlertActionStyle:(UIAlertActionStyle) style andCallBackTarget:(id) target{
UIAlertAction *action;
action = [UIAlertAction actionWithTitle:title style:style handler:^(UIAlertAction * action) {
[target performSelector:selector];
}];
return action;
}
例如,如果您想创建一个标题为" OK"的AlertAction,则嵌入方法" okButtonTapped"和UIAlertActionStyleDefault,你这样称呼它:
UIAlertAction * okAction = [UtilityClass createAlertActionWithSelector:@selector(okButtonTapped)
andTitle:@"OK"
andAlertActionStyle:UIAlertActionStyleDefault
andCallBackTarget:self];
这里CallbackTarget是你调用共享方法的任何类,所以我们在这里传递self
。 在处理程序中执行的方法必须存在于callBackTargetClass 中。
现在将它添加到您的UIAlertController中,如:
[alertController addAction:okAction];
只需确保为要在处理程序块中运行的代码创建方法,并将该方法作为选择器传递给alertAction创建方法。就是这样。
免责声明:它可以正常运行,但它正在显示警告,选择器可能会导致泄漏,因为选择器在执行选择器时未知。有关该警告,请参阅此answer