簡體   English   中英

如何使用didSet更改UITextField(IBOutlet)的文本?

[英]How can I use didSet to change the text of a UITextField (IBOutlet)?

我想在我傳遞的模型對象的DidSet中設置UITextField(IBOutlet)的文本值。

這里的代碼:

    let manageSettingViewController: ManageSettingViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ManageSettingViewController") as ManageSettingViewController
    self.navigationController?.pushViewControllerCustom(manageSettingViewController)
    manageSettingViewController.setting = setting

在manageSettingViewController的didSet中:

   var setting: Setting? {
    didSet
    {
        keyTextField.text = setting?.label
        valueTextField.text = setting?.value
    }

我該如何設置文字? 因為在這種情況下Xcode崩潰,因為“keyTextField是nil”:(

您正在實例化manageSettingViewController之后設置manageSettingViewController.setting - 此時,它尚未從nib / storyboard加載其視圖,因此它的所有IBOutlet變量(可能是keyTextFieldvalueTextField )仍然是零。 這些文本字段在調用ManageSettingViewControllerviewDidLoad方法時被連接起來。

您可以在設置之前更改didSet以檢查可選插座,或通過可選鏈接進行分配:

didSet {
    keyTextField?.text = setting?.label
    valueTextField?.text = setting?.value
}

這樣可以避免崩潰,但也無法更改文本字段的內容。 您還必須為ManageSettingViewController實現viewDidLoad以檢查其setting屬性並相應地設置其文本字段。

當然,這會復制didSet的代碼。 如果您想從其他地方設置setting並自動更新UI,那么該代碼可能仍然有用,但在加載UI之前, didSet將無法幫助您更新UI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM