据我所知,UI控制诸如经由的UITextField他们的代表,其被定义为支持所需的协议类通知的客户端交互/事件。
我经常发现自己想收到超过一类的UI事件的通知,所以会想支持多播。 例如,指定用于UI控制多于一个的代表。 我敢肯定,没有任何的iOS框架的功能,支持这一点。 我想知道是否有人想出了一个体面的解决这个问题?
据我所知,UI控制诸如经由的UITextField他们的代表,其被定义为支持所需的协议类通知的客户端交互/事件。
我经常发现自己想收到超过一类的UI事件的通知,所以会想支持多播。 例如,指定用于UI控制多于一个的代表。 我敢肯定,没有任何的iOS框架的功能,支持这一点。 我想知道是否有人想出了一个体面的解决这个问题?
有一个可可的功能,让您轻松建立多路广播委托-它的消息转发内置的框架体系。
作出这样的覆盖类forwardInvocation:
并返回你的对象的实例,而不是委托。 这就是有时被称为“蹦床对象”。 您的内部逻辑forwardInvocation:
实现现在可以决定其“真实”的对象应该收到消息,并且调用转发到一个或更多的人。
作为更新此接受的答案,我创建了自己的多播委托执行的位置:
http://www.scottlogic.co.uk/blog/colin/2012/11/a-multicast-delegate-pattern-for-ios-controls/
你可以实现你的UI控件在你的类,然后你的类会收到此UI通知,您可以使用相同的委托TECHNIC发送消息给其他类( - 实现一流的委托财产,然后在第二类中实现的委托方法从1-ST类)。 例如,对于的UITextField方法-textFieldDidEndEditing:
在第一类 -
1)实施方案:
@protocol TextControllerDelegate <NSObject>
@optional // Delegate protocols
- (void)textFieldDidEndEditing:(UITextField *)textField;
@end
2) @property (nonatomic, unsafe_unretained, readwrite) id <TextControllerDelegate> delegate;
3)方法- (void)textFieldDidEndEditing:(UITextField *)textField
里面的类,称[delegate textFieldDidEndEditing:textField]
在第二类:
1)实施第一类的对象,将委托设为自(第二类)。
2)实现方法- (void)textFieldDidEndEditing:(UITextField *)textField
支持多播的一种方法是给你的委托类下面的方法:
@interface Delegator : NSObject - (void)addDelegate:(id<MyProtocol>)delegate; - (void)removeDelegate:(id<MyProtocol>)delegate; @end
并存储参考的代表NSHashTable
。
看到这里的实现: http://arielelkin.github.io/articles/objective-c-multicast-delegate/