为alertbox委托使用一个类?

时间:2014-02-22 21:14:49

标签: ios delegates

我有几个viewControllers使用一些alertbox,而不是在每个控制器中都有一个委托,我想为此创建一个类似“alertboxDelegate”的类,并将我的所有alertview链接到这个委托。

我该怎么做? 谢谢

1 个答案:

答案 0 :(得分:0)

根据您使用警报视图的内容,将整个应用程序的所有委托行为放在一个类中可能没有意义。在此之前,您应确保关注single responsibility principle

如果您确定要这样做,则需要定义一个类并让它实现UIAlertViewDelegate

// AlertViewDelegate.h
@interface AlertViewDelegate <UIAlertViewDelegate>

@end

// AlertViewDelegate.m
@implementation AlertViewDelegate

@end

在您要呈现警报视图的视图控制器中,您需要创建此类的实例,但也必须保留它。警报视图本身不会这样做,因为委托是弱引用。您可以使用Objective-C associated objects来保留它,这将导致在释放警报视图本身时释放该委托。

- (void)presentAlert
{
    AlertViewDelegate delegate = [[AlertViewDelegate alloc] init];
    UIAlertView *alert = [UIAlertView ...];
    alert.delegate = delegate;
    objc_setAssociatedObject(alert, "RetainedDelegate", delegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [alert show];
}

我强烈建议不要使用此模式,并在呈现视图控制器中实现委托。