2015-10-16 40 views
0

我通過Storyboard創建了一個容器視圖,並在其中放置了UITextField。 我可以直接從根視圖控制器訪問UITableViewController並設置它的屬性,即containerController?.containerTextField.becomeFirstResponder()。我也可以在根UIViewController中實現容器視圖控制器的協議,但仍然不能強制使用位於UIContainerView中的UITextField來觸發UITextFieldDelegate協議方法。如何訪問位於容器子視圖中的UITextFiled的UITextFieldDelegate方法?

這是容器視圖控制器代碼的一部分:

class ContainerViewController: UIViewController, UITextFieldDelegate { 
    var aContainerDelegate = ContainerDelegate?() 
    @IBOutlet weak var containerTextField: UITextField! 
    (...) 

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 
     print("textFieldShouldBeginEditing") 
     textField.returnKeyType = UIReturnKeyType.Done 
     return true 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     print("textFieldShouldReturn") 
     return true 
    } 
} 

我有和沒有在根視圖控制器UITextFieldDelegate聲明試圖 - 它不改變任何東西。 請告訴我,如何訪問位於容器子視圖中的UITextFiled的UITextFieldDelegate方法? 在此先感謝!

回答

0

在我的情況下,我忘了在根控制器中設置textField.delegate = self。 唯一的問題存在:在

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "containerSegue" { 
      let dest = segue.destinationViewController as! ContainerViewController 
      containerController = dest 
      dest.aContainerDelegate = self 
     } 
    } 

在第一時間訪問容器視圖時containerTextField似乎在這一刻從而containerTextField.delegate = self返回異常(零值)被未初始化我不能直接設置它。我找到了一個解決方法,在按鈕操作中設置委託,顯示並隱藏containerView。

相關問題