我想在我传递的模型对象的 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 is nil”:(
最佳答案
您在实例化 manageSettingViewController
之后立即设置 manageSettingViewController.setting
-- 此时,它还没有从 nib/storyboard 加载它的 View ,所以所有它的 IBOutlet
变量(大概是 keyTextField
和 valueTextField
)仍然是零。这些文本字段在 ManageSettingViewController
的 viewDidLoad
方法被调用时连接起来。
您可以更改您的 didSet
以在设置之前检查可选 socket ,或通过可选链接分配:
didSet {
keyTextField?.text = setting?.label
valueTextField?.text = setting?.value
}
这可以避免崩溃,但也无法更改您的文本字段的内容。您还必须为 ManageSettingViewController
实现 viewDidLoad
以检查其 setting
属性并相应地设置其文本字段。
当然,这会复制您的 didSet
中的代码。如果您想从其他地方设置 setting
并让 UI 自动更新,该代码可能仍然有用,但 didSet
不会帮助您在 UI 加载之前更新 UI。
关于swift - 如何使用 didSet 更改 UITextField (IBOutlet) 的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25760887/