【问题标题】:What is the equivalent for flash/actionscirpt based addEventListener, removeEventListener and dispatchEvent in IOSIOS 中基于 flash/actionscirpt 的 addEventListener、removeEventListener 和 dispatchEvent 的等价物是什么
【发布时间】:2013-06-06 15:13:16
【问题描述】:

作为一些从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 模式、action-target,但似乎没有一个完全匹配?

我将在哪里定义 CustomEvent? CustomEvent.DRAG_DROP?消费者将如何收听该事件?消费者如何知道调度程序可以调度的所有事件?我不想使用委托,因为可能有多个消费者。

【问题讨论】:

    标签: ios objective-c actionscript


    【解决方案1】:

    我知道的关闭方式是选择器...

    // 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 ...类似的东西

    或者您可以使用委托来获得更简洁的方式。

    【讨论】:

    • 你知道如何定义自定义选择器吗?
    【解决方案2】:

    通常这是通过代表列表完成的。如果您想要多个消费者,请定义一个协议(就像您对委托一样),然后创建这些对象的数组。当您想与所有侦听器进行通信时,请遍历将事件发送给每个侦听器的侦听器列表。

    【讨论】:

    • 你有这个例子的链接吗?或者这是一种不太常见的方法?这似乎是一件很常见的事情,令人惊讶的是没有内置/推荐的方式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2012-01-29
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多