2

我有一个名为ToolbarView的类,它是一个子类,UIView基本上创建了一个在顶部UIView消失/重新出现的类。UIToolbar我还有一个ToolbarView被调用的子类,DraggableToolbarView它使用户能够在屏幕上拖动视图。

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

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

完成此任务的最佳/最干净的方法是什么?

4

3 回答 3

5

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

@protocol ToolbarViewDelegate
// some methods
@end

@protocol DraggableToolbarViewDelegate <ToolBarViewDelegate>
// additional methods
@end
于 2012-05-26T13:33:39.400 回答
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
于 2012-05-26T13:31:17.553 回答
0

我认为你做对了。

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

于 2012-05-26T13:32:06.590 回答