multiple listeners for delegate iOS

前端 未结 3 1873
抹茶落季
抹茶落季 2021-02-14 10:20

I have a class search bar with a delegate didSelectString. I have an class A that implements the delegate and a class B that implements the delegate.

However only the de

相关标签:
3条回答
  • 2021-02-14 10:51

    The delegation is a single messaging protocol. You'll need to use NSNotifications if you want to message multiple objects of a change.

    You can pass an object using notifications centre like so:

    NSDictionary *userInfo = @{@"myObject" : customObject};
    
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc postNotificationName:@"myNotificationString" object:self userInfo:userInfo];
    

    When wanting to listen for notifications

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myCustomObserver:)name:@"myNotificationString" object:nil];
    

    And setting up the selector

    -(void)myCustomObserver:(NSNotification *)notification{
        CustomObject* customObject = notification.userInfo[@"myObject"];
    }
    
    0 讨论(0)
  • 2021-02-14 10:57

    You can easily set up a trampoline object that acts as a delegate multiplexer. The idea is to use a proxy object that will stand-in for an array of delegates. When a method is invoked, it will override forwardInvocation or use *IMP_implementationWithBlock* to pass the message on to each of the delegates in the array.

    Then all you need to do is add methods: attachListener and removeListener (btw: see how this is starting to get similar to notifications?)

    Here's a sample project: https://github.com/aleph7/MultiDelegate

    For more information check out the awesome Objective-C Runtime: https://developer.apple.com/library/mac/documentation/cocoa/reference/objcruntimeref/Reference/reference.html

    0 讨论(0)
  • 2021-02-14 11:13

    Create a small new class called Delegates. Have it adopt the search bar protocol so it can be the primary search bar delegate. Have this class offer a method 'addSearchBarDelegate:', in which it will add the delegate to a mutable array. When it gets a delegate message, it forwards it to each registered delegate.

    0 讨论(0)
提交回复
热议问题