2011-06-01 64 views
0

如何在自定義控件上定義自定義可發送操作(可以通過InterfaceBuilder @ Xcode4連接)?如何在自定義控件上定義自定義可發送操作? (可以在IB中識別)

對於實例,UIButton可以調用許多事件的操作。 (Touch up Inside,Touch Up Outside ...等),並且我們可以通過Interface Builder將這些事件與IBActions連接起來。

請不要談論委託模式。就我個人而言,我認爲,實施多種協議使我們感到噁心,很難閱讀對象的核心角色。因爲選擇器名稱由發件人定義,而不是由控制器定義。我想要使​​用更清晰的控制器主題的可讀方法名稱。

因此,我討厭使用委託模式作爲基本的基礎架構,除非我開發出非常簡單的Hello Blah應用程序。

我認爲定義字段NSInvocation *作爲IBOutlet會很好。因爲它在同一時間抽象目標和選擇器。但現在Interface Builder不能識別它。

那麼,如何定義IB可識別的可發送動作。

PS。我知道擴展NSControl的CustomControl只能調用單個目標操作。我想要多個可發送事件,並且我想讓我的對象不能查看或控制。 (我的意思是輕量物體)

回答

0

您應該子類UIControl並定義您自己的控件事件。由於UIControlEventNSInteger,因此您可以爲其分配自己的枚舉值。您最多可以有8個控制事件(按照documentation)從

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

去添加和刪除目標,行動仍然同其他控件。您可以使用[control sendActionsForControlEvents:ControlEvent1]觸發控制事件。

+0

我認爲這種方法只是黑客的事情。而Interface Builder無法識別它。如果我想要擴展事件驅動的基礎知識,我不在乎蘋果的一個。因爲製作自己很容易。 – jeeeyul 2011-06-02 00:56:51