Iphone 如何在自定义控件上定义自定义可发送操作?(可在IB中识别)

Iphone 如何在自定义控件上定义自定义可发送操作?(可在IB中识别),iphone,cocoa-touch,Iphone,Cocoa Touch,如何定义可连接的自定义可发送操作InterfaceBuilder@Xcode4在我的自定义控件上 例如,UIButton可以通过许多事件调用操作。修补内部,修补外部。。。依此类推,我们可以通过Interface builder将这些事件与iAction连接起来 请不要谈论委托模式。我个人认为,实现多个协议会让我们感到恶心,让人难以理解对象的核心角色。因为选择器名称是由发送方定义的,而不是由控制器定义的。我想使用更可读的方法名,它更清楚控制器的主题 所以,我讨厌使用委托模式作为基本的基础结构,除非

如何定义可连接的自定义可发送操作InterfaceBuilder@Xcode4在我的自定义控件上

例如,UIButton可以通过许多事件调用操作。修补内部,修补外部。。。依此类推,我们可以通过Interface builder将这些事件与iAction连接起来

请不要谈论委托模式。我个人认为,实现多个协议会让我们感到恶心,让人难以理解对象的核心角色。因为选择器名称是由发送方定义的,而不是由控制器定义的。我想使用更可读的方法名,它更清楚控制器的主题

所以,我讨厌使用委托模式作为基本的基础结构,除非我开发非常简单的Hello之类的应用程序

我认为将字段a NSInvocation*定义为IBOutlet会很好。因为它同时抽象了目标和选择器。但Interface Builder目前还不认识它

那么,我如何定义IB可识别的可发送操作呢

另外,我知道扩展NSControl的CustomControl只能调用单个目标操作。我想要多个可发送事件,并且我不想让我的对象查看或控制。我的意思是轻量级对象

您应该将UIControl子类化并定义您自己的控制事件。由于uicontrol事件是NSInteger,因此可以为其分配自己的枚举值。根据从开始到结束的顺序,最多可以有8个控制事件

enum {
    ControlEvent1 = 0x0F000000 << 0,
    ...
    ControlEvent8 = 0x0F000000 << 7
};

添加和删除目标操作与其他控件保持相同。您可以使用[control sendActionsForControlEvents:ControlEvent1]触发控制事件。

我认为这种方法只是一种黑客行为。界面生成器无法识别它。如果我只想扩展事件驱动的infra,我不在乎苹果的。因为它很容易使自己的。