2010-03-27 165 views
0

爲了快速模擬UI,我希望能夠將按鈕拖到界面構建器的視圖中,然後將連接從該按鈕拖到應該在單擊時顯示的視圖中。將插座添加到UIButton

UIButton的子類在IB中使用有點不方便,所以我寧願將行爲添加到UIButton本身。不幸的是,似乎在類別中創建的網點在IB中不可見:

@interface UIButton (myextensions) { 
    IBOutlet UIView *outletDestination; 
} 
@end 

可以通過這種方式添加額外的網點嗎?

回答

2

可以通過這種方式添加額外的插座嗎?

沒有。你不能通過在一個類別中聲明它們來添加實例變量。

但是,您可以添加屬性,並且可以將IBOutlet放置在屬性上,以便您可以以這種方式添加網點。通過現代運行時(iPhone上唯一可用的運行時),屬性可以添加實例變量。

我不認爲你可以做到這一點,如果你打算爲屬性做一個自定義訪問者(你必須使用@synthesize),但它聽起來並不像你的情況那麼重要:你只是嘲笑用戶界面,所以你不會寫自定義訪問器。

或者,您可以在「庫」面板的「類」選項卡上創建IB自身的出口。在那裏選擇一個班級,然後選擇下面窗格中的Outlets選項卡,然後在列表中添加一個插座。

您需要爲其他解決方案打開一個筆尖,否則不會顯示類。這是因爲它是上下文敏感的:Mac筆尖將具有AppKit類(如NSButton),而iPhone筆尖將具有UIKit類。

+0

如果我將@property添加到UIButton類別中,我不能使用@synthesize,因爲它是一個類別,並且我不能編寫自己的方法,因爲沒有ivar來存儲數據。如果我創建了插座在IB中,「[ setValue:forUndefinedKey:]:此類不是關鍵目標的關鍵字編碼兼容值。」我也用UIRoundedRectButton嘗試了上述所有內容。 – alltom 2010-03-28 17:57:32

+0

在IB中添加網點只對嘲笑起作用;當你開始真正的編程時,你可以並且應該在頭文件中聲明出口。你是什​​麼意思「我不能使用'@ synthesize'」?當你嘗試時會發生什麼? – 2010-03-29 00:20:47

+0

對不起,我錯過了你的評論;我認爲我沒有收到電子郵件通知。使用@synthesize的錯誤是這樣的:「@synthesize不允許在類別的實現中」 – alltom 2010-05-19 07:13:28