我有一个带有委托 didSelectString 的类搜索栏。我有一个实现委托的 A 类和一个实现委托的 B 类。
然而,只有 A 类的委托被执行。一个委托可以有多个听众吗?以及如何实现
我有一个带有委托 didSelectString 的类搜索栏。我有一个实现委托的 A 类和一个实现委托的 B 类。
然而,只有 A 类的委托被执行。一个委托可以有多个听众吗?以及如何实现
委托是一个单一的消息传递协议。如果要向多个对象发送更改消息,则需要使用 NSNotifications。
您可以使用通知中心传递对象,如下所示:
NSDictionary *userInfo = @{@"myObject" : customObject};
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@"myNotificationString" object:self userInfo:userInfo];
想要收听通知时
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myCustomObserver:)name:@"myNotificationString" object:nil];
并设置选择器
-(void)myCustomObserver:(NSNotification *)notification{
CustomObject* customObject = notification.userInfo[@"myObject"];
}
您可以轻松设置充当委托多路复用器的蹦床对象。这个想法是使用一个代理对象来代替一组委托。调用方法时,它将覆盖forwardInvocation或使用*IMP_implementationWithBlock*将消息传递给数组中的每个委托。
然后你需要做的就是添加方法:attachListener 和 removeListener(顺便说一句:看看这开始变得类似于通知了吗?)
这是一个示例项目:https ://github.com/aleph7/MultiDelegate
有关更多信息,请查看出色的 Objective-C 运行时:https ://developer.apple.com/library/mac/documentation/cocoa/reference/objcruntimeref/Reference/reference.html
创建一个名为 Delegates 的小型新类。让它采用搜索栏协议,以便它可以成为主要的搜索栏代表。让这个类提供一个方法'addSearchBarDelegate:',在这个方法中它将委托添加到一个可变数组。当它收到一个委托消息时,它会将其转发给每个注册的委托。