objective-c - 在 Objective-C 中实现目标- Action 设计模式

标签 objective-c uikit

我正在尝试在自定义类中实现目标- Action 设计模式。该接口(interface)将具有以下方法:

- (void)addTarget:(id)target action:(SEL)action forEvents:(MyEvents)events;

MyEvents 是一个 NSUInteger。在我的类(class)中存储这些信息的最佳方式是什么?打开文件 UIControl.h 我注意到 UIKit 包含以下内容:

NSMutableArray* _targetActions;

我想所有的 Action 都被添加到这个封装在 NSObject 中的数组中(我需要创建另一个自定义对象还是有什么我可以重用的东西?)并且每次它需要执行一个 Action 时它都会使用位掩码作为过滤器。是否正确?

提前致谢。

最佳答案

该数组包含名为 UIControlTargetAction 的私有(private)类的实例。它只是一个具有三个实例变量的 POD 类:

id _target;
SEL _action;
int _eventMask;

您可以很容易地创建自己的版本。然后,当您有事件时,您只需执行以下操作:

for (MyTargetAction *targetAction in targetActions) {
    if (targetAction.eventMask & myEventMask) {
        [targetAction.target performSelector:targetAction.action];
    }
}

关于objective-c - 在 Objective-C 中实现目标- Action 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5953053/

相关文章:

memory-leaks - 用于缩放图像的 UIGraphicsGetImageFromCurrentImageContext 内存泄漏

ios - 在 iOS 中从 Facebook 获取用户的个人信息

iphone - UITextView 委托(delegate)方法 textView :shouldChangeTextInRange:replacementText: gives erroneous replacementText on fast delete

objective-c - 插入的对象不会反射(reflect)在 NSFetchRequest 的查询结果中

ios - 磨砂玻璃(iOS 7 模糊)效果

ios - 带有嵌套堆栈 View 的 Swift UIStackView 间距

ios - 以编程方式选择 UITextField 中的所有文本

iphone - objective-c : Write a function to return the position of the last character in a UILabel?

iphone - 无法从 View Controller 手动加载 xib?

objective-c - Cocoa (Mac Os X) 打印多页,为什么预览窗口显示 2 页而不是 1 页?