[英]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
变量(可能是keyTextField
和valueTextField
)仍然是零。 这些文本字段在调用ManageSettingViewController
的viewDidLoad
方法时被连接起来。
您可以在设置之前更改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.