UIView和UIImageView的公共基类/代码 - 替代objective-c中的多重继承

时间:2010-03-09 18:31:12

标签: objective-c cocoa-touch

我在所有类中都需要一些功能,这些功能来自UIView或UIImageView。

更具体地说,我有这些类需要的手势相关代码 目前我的实施是:

UIGestureView : UIView
UIGestureImageView : UIImageView

并使所有类派生自这些类。 这些类将再次包含派生类将实现的方法。

我的问题是手势处理代码在UIGestureViewUIGestureImageView中重复。

这里(作为c ++程序员)自然会使用多重继承

UIGestureView : UIView, GestureHandler
UIGestureImageView : UIImageView, GestureHandler

GestureHandler执行所有通用工作,但据我所知,这是不可能的。

这样做的目标-c方式是什么(没有太多级别的孩子呼叫父母等)?

只是强调,问题是如何避免两次实现相同的代码,一次是在UIView(或其派生类)中,另一次是UIImageView(或其派生类)。

3 个答案:

答案 0 :(得分:4)

您可以使用手势处理扩展UIView,然后从UIView继承的每个对象都将拥有您想要的方法。不是很棒和子类化,但可以在全局范围内工作。

@interface UIView (GestureHandling)

- (void)didMoveAFinger:(UITouch*)touchOrWhatever;
// etc., etc.

@end

我与UIViewControllerUITableViewController有类似的问题。我有一个子类,我想与另一个的子类共享代码。然而,如果你想要一个子类,没有共同的地方注入该代码。另一种选择是共同超类的类别。

答案 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>