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

时间:2014-09-10 08:40:28

标签: swift storyboard interface-builder

我想在我传递的模型对象的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”:(

1 个答案:

答案 0 :(得分:2)

您在实例化manageSettingViewController.setting后立即设置manageSettingViewController - 此时,它尚未从nib / storyboard加载其视图,因此它的所有IBOutlet变量(大概是keyTextFieldvalueTextField)仍然是零。从调用ManageSettingViewController的{​​{1}}方法开始,这些文本字段就已连接起来。

您可以在设置之前更改viewDidLoad以检查可选插座,或通过可选链接进行分配:

didSet

这可以避免崩溃,但也无法更改文本字段的内容。您还必须为didSet { keyTextField?.text = setting?.label valueTextField?.text = setting?.value } 实施viewDidLoad以检查其ManageSettingViewController属性并相应地设置其文本字段。

当然,这会复制setting中的代码。如果您想从其他地方设置didSet并自动更新UI,那么该代码可能仍然有用,但在加载UI之前,setting无法帮助您更新UI。