我從一個nib文件中加載了一個UIView
。我寫了一些方法,我可以連接到筆尖的First Responder
。他們工作正常。引用到視圖內的UIButton
現在我必須引用一個嵌入在加載視圖中的UIButton
。但由於它不是視圖控制器/只是UIView
(我猜?),File's Owner
沒有檢測到.h
-文件中的我的IBOutlet UIButton * button
。
那麼這裏發生了什麼?謝謝!
我從一個nib文件中加載了一個UIView
。我寫了一些方法,我可以連接到筆尖的First Responder
。他們工作正常。引用到視圖內的UIButton
現在我必須引用一個嵌入在加載視圖中的UIButton
。但由於它不是視圖控制器/只是UIView
(我猜?),File's Owner
沒有檢測到.h
-文件中的我的IBOutlet UIButton * button
。
那麼這裏發生了什麼?謝謝!
有幾個方法可以做到這一點..其中之一是..
設置按鈕在Interface Builder Tag屬性,然後在代碼中,遍歷所有子視圖尋找與標籤視圖您設置
..Didn't測試這一點,但它應該是這樣的
for (UIView *subView in [view subviews]) {
if (subView.tag == <YOUR TAG HERE>) {
UIButton *button = (UIButton *)subView;
}
}
..I'd在一個名爲getSubviewWithTag功能把這個包,所以你可以在其他地方重複使用它
你真的不需要這樣做。使用Interface Builder的插座機制,這就是它們的用途。 – bandejapaisa 2012-03-26 09:24:27
...如果你真的要做這樣的事情,那麼你可以通過標籤使用' - (UIView *)viewWithTag:(NSInteger)標籤'來獲取子視圖... – bandejapaisa 2012-03-26 09:26:07
有時候我不知道爲什麼我打擾,如果你不會聽到正確的做事方式。這真的不是正確的答案或如何正確地做到這一點。這裏提出了各種其他正確的答案,即使是圖表! – bandejapaisa 2012-03-26 14:08:02
在Interface Builder中拖動連接時,並不總是必須連接到文件所有者。從你的UIButton拖放,並放在包含它的UIView上。如果它在你自定義的UIView類上有一個IBOutlet UIButton屬性 - 它會連接起來。
在特定視圖中很容易分配和查看按鈕。 然後定義動作動態在.m類的「視圖」可能會爲你工作。
[btn addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
是的,我知道這種可能性。但是因爲我想爲我的客戶提供所見即所得的選項,所以這不是最好的選擇。 – DAS 2012-03-26 09:36:01
下面是它是如何做到的例子:在xib
右鍵單擊UIButton
,點擊參考點並將其拖動到File's Owner
。只要釋放點擊,就會彈出所有可以連接元素的IBOutlet
。
編輯 - 如果它不變爲藍色,那麼您還沒有爲您的File's Owner
設置自定義類!你可以這樣做,如下所示。點擊File's Owner
,然後點擊第三個標籤。將其設置爲您的自定義視圖控制器。
是的,我知道。但是'File's Ower'不會變成藍色。 – DAS 2012-03-26 09:35:22
@達爾文編輯答案! – tipycalFlow 2012-03-26 09:43:24
是的,我的類有'UIView',而不是'UIViewController',如果我添加一個'UIViewController'到我的nib文件,應用程序崩潰,並說smt。關於不能分配兩個單例類(我的VC是單例類)。也許我的代碼存在錯誤,但是哪裏? – DAS 2012-03-26 09:52:45
因此,將'xib'中的按鈕連接到'File Owner'不起作用? – tipycalFlow 2012-03-26 09:21:30
您是否在身份檢查器中設置了UIView的自定義類名? – Ilanchezhian 2012-03-26 09:25:35
如果你對你的uiview有一些控制,爲什麼不使用uiviewcontroller並使用它的視圖?在你的方式,我認爲你是違背MVC模式..有人糾正我,如果我錯了,請,我不太確定。 – Mat 2012-03-26 09:34:30