代表的子类?

时间:2012-05-26 13:24:53

标签: iphone ios cocoa-touch design-patterns delegates

我有一个名为ToolbarView的类,它是UIView的子类,基本上会创建一个UIView,其顶部会消失/重新出现UIToolbar。我还有一个名为ToolbarView的{​​{1}}子类,它允许用户在屏幕上拖动视图。

我需要为DraggableToolbarView创建一个委托,以便它可以在工具栏重新出现和消失时通知另一个对象/类。我还需要为ToolbarView创建一个委托,这样我就可以在拖动视图时通知另一个对象/类。

目前,我已为每个代理创建一个单独的委托,但我想知道是否有更好的模式呢?也许为DraggableToolbarView实现一个委托,并将ToolbarView的委托方法列为可选项?或者有没有办法对代理进行子类化?

实现这一目标的最佳/最干净的方法是什么?

3 个答案:

答案 0 :(得分:5)

如果您为委托方法创建协议(无论如何总是一个好主意),您可以使用另一个协议采用第一个协议。这就建立了类似继承的关系:

@protocol ToolbarViewDelegate
// some methods
@end

@protocol DraggableToolbarViewDelegate <ToolBarViewDelegate>
// additional methods
@end

答案 1 :(得分:4)

是的,您可以拥有inheriting协议:

@protocol Proto1 

@reqired
-(void) somethingHappened:(id) sender;

@optional
-(void) somethingElseHappened:(id) sender;

@end

@protocol Proto2<Proto1>

// this now contains all of the method signatures found in proto1, with the addition of new ones!

-(void) somethingSpecialHappened:(id) sender;

@end

答案 2 :(得分:0)

我认为你做得对。

考虑UITextView,它是UIScrollView的子类。每个都有自己的委托协议,负责对特定的消息集做出反应。只要您将可见性和拖动视为单独的问题,允许不同的对象处理其委派似乎是合乎逻辑的。