ios - UITextField 没有获取属性 swift 4

标签 ios swift uitextfield

我有包含文本字段的自定义控件。示例代码如下所示:

@IBDesignable
class MyTextField: UIView {
  private var _text: String?
  private var textField: UITextField?

@IBInspectable var text: String? {
    get {
        return _text
    } set (newValue) {
        guard let txt = newValue else { return }
        self._text = txt
        //updateView()
    }
}

override func awakeFromNib() {
    super.awakeFromNib()
    updateView()
}

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    updateView()
}

func updateView() {
    textField = UITextField(frame: CGRect(x: 0, y: 0, width: 97, height: 30))
    self.addSubview(textField!)
    textField!.text = self._text
}}

当我在代码中创建自定义控件的导出时,我可以设置文本属性,但无法获取它。我究竟做错了什么 ?我是新手,所以不太明白...

编辑:

  1. 将 MyTextField 添加到 Main.storyboard 和标准 textField
  2. 创建一个 socket ​@IBOutlet var myTextField: MyTextField!

    标准文本字段

  3. 在对象检查器中设置控件的 Text 属性 enter image description here

  4. 我对 Storyboard的控制正确更新并且“测试文本”可见
  5. 添加按钮并创建操作导出

    情况 1:工作正常

    @IBAction func click(_ 发送者: UIButton) { myTextField.text = standardTextField.text }

    情况 2:不起作用

    @IBAction func click(_ 发送者: UIButton) { standardTextField.text = myTextField.text }

    在情况 2 之后,standardTextField 中只有我从对象检查器设置的值。如果我更改 myTextField.text 的值,standardTextField 仍显示对象检查器的原始值

最佳答案

我在 Xcode 中复制了您的设置。情况 2 确实有效 - 单击按钮时,standardTextField 显示 MyTextField 的文本。

注意:在 MyTextField 中,我假设您希望创建 textField 一次,而不是在每次文本更新时重新创建它。不过,案例 2 在没有进行此更改的情况下也能正常工作。

import UIKit

class ViewController: UIViewController {
    @IBOutlet var myTextField: MyTextField!
    @IBOutlet var standardTextField: UITextField!
    @IBOutlet weak var button: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        button.addTarget(self, action: #selector(click(_:)), for: .touchUpInside)
    }

    @IBAction func click(_ sender: UIButton) {
        // myTextField.text = standardTextField.text // Case 1 works
        standardTextField.text = myTextField.text // Case 2 works
    }
}

MyTextField 控件:

import UIKit

@IBDesignable
class MyTextField: UIView {
    private var _text: String?
    private var textField = UITextField(frame: CGRect(x: 0, y: 0, width: 97, height: 30))

    @IBInspectable var text: String? {
        get {
            return _text
        } set (newValue) {
            guard let txt = newValue else { return }
            self._text = txt
            updateView()
        }
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        self.addSubview(textField)
        updateView()
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        self.addSubview(textField)
        updateView()
    }

    func updateView() {
        textField.text = self._text
    }
}

关于ios - UITextField 没有获取属性 swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47984376/

相关文章:

ios - block 是否保证局部变量将在 Swift 中被修改?

ios - 向上滚动时隐藏大标题

Swift 闭包类型转换

ios - 'UITextField' XCode 7

ios - 关闭 UITableView 单元格中 UITextfield 的键盘

ios - 当我在 IOS 中使用它的父项时,弱引用是否可能被垃圾收集?

ios - 如何在 SwiftUI 中点击 ActionSheet.Button 后呈现 View ?

ios - IOS (Swift) 中的单元测试 BLE 应用程序

ios - 在 Swift 中启动 View Controller 时无法展示插页式广告

ios - 为 UITextField 创建一个通用的下一步按钮