【发布时间】:2015-06-27 19:43:58
【问题描述】:
我有一个超类,有时我会在其中显示 UIAlertView 并处理委托 (clickedButtonAtIndex)。 当我有一个也处理“clickedButtonAtIndex”的子类时,只调用子类委托。
在这两种情况下,UIAlertView 都是这样显示的:
[[[UIAlertView alloc] initWithTitle:@"" message:@"message" delegate:self cancelButtonTitle:@"Close" otherButtonTitles:@"Open", nil]show];
在超类和子类中具有相同的委托是我做错了什么还是设计不好。我认为“代表:自我”将它们分开。
我可以在调试器中看到“self”引用了我的子类,即使我在我的超类中,所以这可能是问题所在?有什么想法吗?
【问题讨论】:
-
如果你想在子类中调用超类的方法,请调用
[super alertView:alertView clickedButtonAtIndex:buttonIndex];。 -
感谢您的建议,但是我需要在超类中公开该方法。并在我所有的子类中调用它。这似乎有点矫枉过正,而且设计不正确?
-
你的目标是 ios 8 吗?如果是这样,您应该使用 uialertcontroller。
-
不,针对 iOS 7。
-
当一个子类覆盖了一个方法并且该子类方法也需要父类运行时,你必须调用super。你没有选择。如果子类对该方法没有附加功能,则它们不会覆盖该方法。如果子类确实对方法有特殊需求并且不想要超类的功能,那么就不要调用super。
标签: ios objective-c inheritance delegates uialertview