多路广播委托 - 多类接收iOS设备的用户界面控件的通知(Multicast delegates -

2019-07-31 11:57发布

据我所知,UI控制诸如经由的UITextField他们的代表,其被定义为支持所需的协议类通知的客户端交互/事件。

我经常发现自己想收到超过一类的UI事件的通知,所以会想支持多播。 例如,指定用于UI控制多于一个的代表。 我敢肯定,没有任何的iOS框架的功能,支持这一点。 我想知道是否有人想出了一个体面的解决这个问题?

Answer 1:

有一个可可的功能,让您轻松建立多路广播委托-它的消息转发内置的框架体系。

作出这样的覆盖类forwardInvocation:并返回你的对象的实例,而不是委托。 这就是有时被称为“蹦床对象”。 您的内部逻辑forwardInvocation:实现现在可以决定其“真实”的对象应该收到消息,并且调用转发到一个或更多的人。

作为更新此接受的答案,我创建了自己的多播委托执行的位置:

http://www.scottlogic.co.uk/blog/colin/2012/11/a-multicast-delegate-pattern-for-ios-controls/



Answer 2:

你可以实现你的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



Answer 3:

支持多播的一种方法是给你的委托类下面的方法:

@interface Delegator : NSObject - (void)addDelegate:(id<MyProtocol>)delegate; - (void)removeDelegate:(id<MyProtocol>)delegate; @end

并存储参考的代表NSHashTable

看到这里的实现: http://arielelkin.github.io/articles/objective-c-multicast-delegate/



文章来源: Multicast delegates - multiple classes receiving notifications from UI controls in iOS