如何编写一个通用函数来为UIAlertViewController创建UIAlertAction,以便在整个应用程序中使用?

时间:2016-11-17 07:54:29

标签: objective-c ios9 xcode7

是否可以创建一个可以生成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时恢复处理程序并执行任何任务。

1 个答案:

答案 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