我有一个名为ToolbarView
的类,它是UIView
的子类,基本上会创建一个UIView
,其顶部会消失/重新出现UIToolbar
。我还有一个名为ToolbarView
的{{1}}子类,它允许用户在屏幕上拖动视图。
我需要为DraggableToolbarView
创建一个委托,以便它可以在工具栏重新出现和消失时通知另一个对象/类。我还需要为ToolbarView
创建一个委托,这样我就可以在拖动视图时通知另一个对象/类。
目前,我已为每个代理创建一个单独的委托,但我想知道是否有更好的模式呢?也许为DraggableToolbarView
实现一个委托,并将ToolbarView
的委托方法列为可选项?或者有没有办法对代理进行子类化?
实现这一目标的最佳/最干净的方法是什么?
答案 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
的子类。每个都有自己的委托协议,负责对特定的消息集做出反应。只要您将可见性和拖动视为单独的问题,允许不同的对象处理其委派似乎是合乎逻辑的。