2012-10-29 29 views
0

簡單:UITextView的委託方法不叫裏面的子視圖

在ClassA_VC我做的:

ClassB_VC *classB_VC=[ClassB_VC alloc]initWithNibName:@"ClassB_VC" bundle:nil]; 
[self.view addSubview:classB_VC.view]; 

然後在ClassB_VC我有一個的UITextField。我在IB中設置textfield和File的所有者之間的委託連接,我在@interface聲明中添加,並像往常一樣編寫協議方法(textFieldDidEndEditing,textFieldDidBeginEditing等)。

這應該可以,但是當我觸摸文本框時,我得到了一個異常。看起來textfield沒有到達它的代表。

但是,如果我使用presentModalViewController呈現視圖,一切工作正常。我寧願不必這樣做,因爲這些視圖是到一個tabViewController,我不想隱藏tabBar時顯示。

我希望你明白我想說什麼。我的英文不是很好。

+0

完整的異常消息會有幫助。由於UITextFieldDelegate的所有方法都是可選的,因此接口文件中的協議引用或拼寫委託方法簽名不應該是一個問題,它看起來更像是內存問題。 –

+0

好吧,就是這一點。沒有消息,只是凍結。我得到的是線程1的軌跡顯示了這些最後一行:0 objc_msgSend 1 - [UITextField canBecomeFirstResponder] 2- [UIResponder becomeFirstResponder] 3 - [UITextInteractionAssistant setFirstResponderIfNecessary]看起來添加的視圖不是第一響應者。我試圖在viewDidLoad中強制[self.view becomeFirstResponder],但仍然是一樣的。如果我將UITextField從委託中解除鏈接,它不會崩潰,但我無法隱藏鍵盤等等。 – rmvz3

+0

您可能已在委託方法的某個位置創建了一個無限循環,請嘗試對它們進行註釋。如果問題仍然存在,則需要檢查InterfaceBuilder連接,但不要讓您將UITextField插座連接到其他類型插座,但您可能在創建連接後手動更改插座類。或者你是否在代碼中手動設置了這個插座? –

回答

1

你保留ClassB_VC在ClassA_VC?

+0

是!這就是訣竅。看起來很明顯......現在。 :D我不明白爲什麼會發生這種情況。視圖不會被卸載,也不會從屏幕上移除。 :| – rmvz3

+0

謝謝大家的回答。 – rmvz3

+0

視圖保留被添加到其他視圖,第二個視圖控制器,也是textView委託,不被任何東西保留。那麼會發生什麼是viewController被釋放 - 它釋放它的出口,但它們在視圖的棧中保留它們,這就是視圖**沒有被解除分配,但視圖控制器作爲委託**被解除分配。當你將viewController的視圖顯示爲模態時,控制器會被保留,控制器不會被釋放。希望現在清楚。 –

0

從界面生成器中刪除委託並做到這一點:

ClassB_VC *classB_VC=[ClassB_VC alloc]initWithNibName:@"ClassB_VC" bundle:nil]; 
[classB_VC.yourTextField setDelegate:classB_VC]; 
[self.view addSubview:classB_VC.view]; 

讓我知道這是否有助於

+0

它沒有工作。我以前已經遇到過這個問題,並且必須將ClassB中的視圖和方法包含到ClassA中,並在需要時將其隱藏起來。這對我來說似乎非常混亂。處理這個問題一定是非常非常容易的,但是我錯過了一些很明顯的東西。 – rmvz3