我有一个带有alertDelegate功能的BaseController
这是alertView
@interface BaseController : UIViewController
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"TITLE" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
假设我有另一个会出现我的BaseController的ViewCOntorller
@interface MainController : BaseController
我面临的问题是,当我在BaseController中调用AlertView时,如果我的MainController有alertDelegate
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}
仅在MainController中调用alertView委托,而不是在BaseController中调用。
我希望如何在扩展BaseController的每个屏幕中执行此警报。但是很难在每个控制器中复制粘贴相同数量的代码。有没有什么可以在BaseController中调用它,因为每个控制器都扩展它?
答案 0 :(得分:3)
您必须明确调用super
委托方法:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
[super alertView:alertView clickedButtonAtIndex:buttonIndex];
// Do other stuff
}
这是因为您已经将视图控制器类子类化,因此调用任何重写的方法而不是超类方法。这包括任何协议方法,因为它们被认为没有区别。