1

actionscript から IOS にコードを移植している人として、Flash/Actionscript のイベント ディスパッチ メカニズムに従う多くのカスタム コンポーネントがあります。

例: ディスパッチャ:

dispatchEvent(new CustomEvent(CustomEvent.DRAG_DROP));

消費者:

dispatcher.addEventListener(CustomEvent.DRAG_DROP, actionHandler);

private function actionHandler(event:CustomEvent):void {
            trace("actionHandler: " + event);
        }

NSNotificationCenter、KVO パターン、アクション ターゲットについては知っていますが、完全に一致するものはないようです。

CustomEvent はどこで定義しますか? CustomEvent.DRAG_DROP? 消費者はどのようにイベントをリッスンしますか? コンシューマーは、ディスパッチャーがディスパッチできるすべてのイベントをどのように知るのでしょうか? 複数のコンシューマーが存在する可能性があるため、デリゲートを使用したくありません。

4

2 に答える 2

0

私が知っているクローズ方法はセレクターです...

// store event handler
SEL targetHandler;

// firing an event
[targetHandler performSelector:targetHandler withObject:eventObj];

// event handler in the listening class
- (void) onStuffHappened: (Event*) event
{

}

それは明らかに簡単な考えです。私は NSObject を拡張し、ハンドラーを NSMutableArray に格納してから、格納されているすべてのハンドラーで performSelector を実行します...そのようなもの

または、よりクリーンな方法でデリゲートを使用できます。

于 2013-06-10T21:37:35.573 に答える
0

通常、これはデリゲートのリストで行われます。複数のコンシューマーが必要な場合は、(デリゲートの場合と同様に) プロトコルを定義してから、それらのオブジェクトの配列を作成します。すべてのリスナーと通信する場合は、各リスナーにイベントを送信するリスナーのリストを反復処理します。

于 2013-06-10T21:26:51.510 に答える