我在所有类中都需要一些功能,这些功能来自UIView或UIImageView。
更具体地说,我有这些类需要的手势相关代码 目前我的实施是:
UIGestureView : UIView
UIGestureImageView : UIImageView
并使所有类派生自这些类。 这些类将再次包含派生类将实现的方法。
我的问题是手势处理代码在UIGestureView
和UIGestureImageView
中重复。
这里(作为c ++程序员)自然会使用多重继承
UIGestureView : UIView, GestureHandler
UIGestureImageView : UIImageView, GestureHandler
让GestureHandler
执行所有通用工作,但据我所知,这是不可能的。
这样做的目标-c方式是什么(没有太多级别的孩子呼叫父母等)?
只是强调,问题是如何避免两次实现相同的代码,一次是在UIView(或其派生类)中,另一次是UIImageView(或其派生类)。
答案 0 :(得分:4)
您可以使用手势处理扩展UIView
,然后从UIView
继承的每个对象都将拥有您想要的方法。不是很棒和子类化,但可以在全局范围内工作。
@interface UIView (GestureHandling)
- (void)didMoveAFinger:(UITouch*)touchOrWhatever;
// etc., etc.
@end
我与UIViewController
和UITableViewController
有类似的问题。我有一个子类,我想与另一个的子类共享代码。然而,如果你想要一个子类,没有共同的地方注入该代码。另一种选择是共同超类的类别。
答案 1 :(得分:1)
答案 2 :(得分:0)
您应该尝试使用协议和委派。它们解决了objective-c中的多重继承问题。
@protocol MyProtocol <NSObject>
//Method declarations go here
@end
@protocol MyProtocol2 <NSObject>
//Method declarations go here
@end
@interface CustomView : UIView <MyProtocol, MyProtocol2>