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

标签 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 is nil”:(

最佳答案

您在实例化 manageSettingViewController 之后立即设置 manageSettingViewController.setting -- 此时,它还没有从 nib/storyboard 加载它的 View ,所以所有它的 IBOutlet 变量(大概是 keyTextFieldvalueTextField )仍然是零。这些文本字段在 ManageSettingViewControllerviewDidLoad 方法被调用时连接起来。

您可以更改您的 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/

相关文章:

ios - 从 NSData 创建 ENUM

ios - iAD 未按预期工作

ios - Xcode - 未找到从 Main.storyboard 引用的名为 "MyStoryboard"的 Storyboard

objective-c - iOS 5 Storyboard,以编程方式确定路径

ios - @IBOutlet 和@IBAction 引用了错误的项目,如何摆脱这些引用?

iphone - UICollectionView 框架与工具栏错误

cocoa - 基于 NSTableView 的 View 中的 NSDateFormatter

swift - 如何从文件中读取并放入数组

xcode - 模拟器中的黑屏问题

ios - 类在目标中被多次链接