我有几个viewControllers使用一些alertbox,而不是在每个控制器中都有一个委托,我想为此创建一个类似“alertboxDelegate”的类,并将我的所有alertview链接到这个委托。
我该怎么做? 谢谢
答案 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];
}
我强烈建议不要使用此模式,并在呈现视图控制器中实现委托。