2012-03-26 30 views
0

我從一個nib文件中加載了一個UIView。我寫了一些方法,我可以連接到筆尖的First Responder。他們工作正常。引用到視圖內的UIButton

現在我必須引用一個嵌入在加載視圖中的UIButton。但由於它不是視圖控制器/只是UIView(我猜?),File's Owner沒有檢測到.h-文件中的我的IBOutlet UIButton * button

那麼這裏發生了什麼?謝謝!

+0

因此,將'xib'中的按鈕連接到'File Owner'不起作用? – tipycalFlow 2012-03-26 09:21:30

+0

您是否在身份檢查器中設置了UIView的自定義類名? – Ilanchezhian 2012-03-26 09:25:35

+0

如果你對你的uiview有一些控制,爲什麼不使用uiviewcontroller並使用它的視圖?在你的方式,我認爲你是違背MVC模式..有人糾正我,如果我錯了,請,我不太確定。 – Mat 2012-03-26 09:34:30

回答

1

有幾個方法可以做到這一點..其中之一是..

設置按鈕在Interface Builder Tag屬性,然後在代碼中,遍歷所有子視圖尋找與標籤視圖您設置

..Didn't測試這一點,但它應該是這樣的

for (UIView *subView in [view subviews]) { 
    if (subView.tag == <YOUR TAG HERE>) { 
     UIButton *button = (UIButton *)subView; 
    } 
} 

..I'd在一個名爲getSubviewWithTag功能把這個包,所以你可以在其他地方重複使用它

+0

你真的不需要這樣做。使用Interface Builder的插座機制,這就是它們的用途。 – bandejapaisa 2012-03-26 09:24:27

+3

...如果你真的要做這樣的事情,那麼你可以通過標籤使用' - (UIView *)viewWithTag:(NSInteger)標籤'來獲取子視圖... – bandejapaisa 2012-03-26 09:26:07

+1

有時候我不知道爲什麼我打擾,如果你不會聽到正確的做事方式。這真的不是正確的答案或如何正確地做到這一點。這裏提出了各種其他正確的答案,即使是圖表! – bandejapaisa 2012-03-26 14:08:02

1

在Interface Builder中拖動連接時,並不總是必須連接到文件所有者。從你的UIButton拖放,並放在包含它的UIView上。如果它在你自定義的UIView類上有一個IBOutlet UIButton屬性 - 它會連接起來。

0

在特定視圖中很容易分配和查看按鈕。 然後定義動作動態在.m類的「視圖」可能會爲你工作。

[btn addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside]; 
+0

是的,我知道這種可能性。但是因爲我想爲我的客戶提供所見即所得的選項,所以這不是最好的選擇。 – DAS 2012-03-26 09:36:01

1

下面是它是如何做到的例子:在xib

enter image description here

右鍵單擊UIButton,點擊參考點並將其拖動到File's Owner。只要釋放點擊,就會彈出所有可以連接元素的IBOutlet

編輯 - 如果它不變爲藍色,那麼您還沒有爲您的File's Owner設置自定義類!你可以這樣做,如下所示。點擊File's Owner,然後點擊第三個標籤。將其設置爲您的自定義視圖控制器。

enter image description here

+0

是的,我知道。但是'File's Ower'不會變成藍色。 – DAS 2012-03-26 09:35:22

+0

@達爾文編輯答案! – tipycalFlow 2012-03-26 09:43:24

+0

是的,我的類有'UIView',而不是'UIViewController',如果我添加一個'UIViewController'到我的nib文件,應用程序崩潰,並說smt。關於不能分配兩個單例類(我的VC是單例類)。也許我的代碼存在錯誤,但是哪裏? – DAS 2012-03-26 09:52:45