10

デリゲート didSelectString を含むクラス検索バーがあります。デリゲートを実装するクラス A と、デリゲートを実装するクラス B があります。

ただし、クラス A のデリゲートのみが実行されます。デリゲートは複数のリスナーを持つことができますか? そして、これをどのように実装しますか

4

3 に答える 3

15

委任は、単一のメッセージング プロトコルです。変更の複数のオブジェクトにメッセージを送信する場合は、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"];
}
于 2013-10-19T10:24:53.937 に答える
3

デリゲート マルチプレクサとして機能するトランポリン オブジェクトを簡単に設定できます。アイデアは、デリゲートの配列の代わりになるプロキシ オブジェクトを使用することです。メソッドが呼び出されると、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

于 2013-10-28T04:48:48.833 に答える
2

Delegates という小さな新しいクラスを作成します。検索バー プロトコルを採用して、主要な検索バー デリゲートにできるようにします。このクラスにメソッド「addSearchBarDelegate:」を提供させます。このメソッドではデリゲートを変更可能な配列に追加します。デリゲート メッセージを取得すると、それを登録済みの各デリゲートに転送します。

于 2013-10-19T12:21:27.040 に答える