2010-03-09 47 views
0

我有一些功能,我需要从UIView或UIImageView派生的所有类。UIView和UIImageView的通用基类/代码 - 在Objective-C中替代多重继承

更具体地说,我有这两个类都需要的与手势相关的代码。
目前我的实现是:

UIGestureView : UIView 
UIGestureImageView : UIImageView 

,使所有类都从这些派生。 这些类将再次包含派生类将实现的方法。

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

这里的自然的事情(为C++程序员)将使用多重继承

UIGestureView : UIView, GestureHandler 
UIGestureImageView : UIImageView, GestureHandler 

,让GestureHandler执行所有的通用工作,但据我理解这一点是不可能的。

这样做的目标c的方式是什么(没有太多的子级调用父级等)?

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

回答

4

您可以用手势处理扩展UIView,然后从UIView继承的每个对象都将拥有所需的方法。虽然不像真棒和子类,但可以在全球范围内工作。

@interface UIView (GestureHandling) 

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

@end 

我有过类似的问题与UIViewControllerUITableViewController。我有一个我想与另一个的子类共享代码的子类。然而,如果你想要一个子类,那么没有通用的地方可以注入这些代码。另一种选择是共同超类的类别。

+0

这仍然是我需要的UIImageView相同的行为不解决代码重复的问题。 – 2010-03-09 18:55:04

+1

@LK:UIImageView是UIView的子类。 – Chuck 2010-03-09 19:21:09

+0

好的 - 在另一个答案中看到了相同的结果。将检查出来 - 谢谢! – 2010-03-09 19:23:56

0

您应该尝试使用协议和委派。他们解决了objective-c中的多重继承问题。

@protocol MyProtocol <NSObject> 
//Method declarations go here 
@end 

@protocol MyProtocol2 <NSObject> 
//Method declarations go here 
@end 

@interface CustomView : UIView <MyProtocol, MyProtocol2> 
+0

协议不能解决多重继承问题,因为它们不包含任何代码。他们确实为不相关的类之间的通用接口提供了一个模板,但不要让你做类似于处理手势代码的事情。你仍然需要把代码放在某个地方。 – 2010-03-09 18:49:08

+0

协议/代表似乎添加了一个额外的图层回拨 - 我试图避免这个 – 2010-03-09 18:51:19

1
+0

作为这里的其他答案,这允许将代码添加到现有的类,但不能解决代码重复的问题,因为我需要在UIView和UIImageView中都存在完全相同的代码 – 2010-03-09 18:57:00

+0

由于UIImageView是从UIView继承的,因此UIView上的类别应该可以解决您的问题。 – kubi 2010-03-09 19:16:50

+0

哦 - 我明白了,会检查出来 - 谢谢。 – 2010-03-09 19:18:47