UITextField没有获取属性swift 4

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITextField没有获取属性swift 4相关的知识,希望对你有一定的参考价值。

我有自定义控件,其中包含textField。示例代码如下所示:

@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
}}

当我在代码中创建我的自定义控件的插座我可以set文本属性,但我不能get它。我究竟做错了什么 ?我是新手,所以我不明白......

编辑:

  1. 将MyTextField添加到Main.storyboard和标准textField
  2. 创建一个出口@IBOutlet var myTextField: MyTextField!和 standardTextField
  3. 在Object Inspector enter image description here中设置我的控件的Text属性
  4. 我对故事板的控制正确更新,“测试文本”可见
  5. 添加按钮并创建动作插座 案例1:工作正常 @IBAction func click(_ sender:UIButton){myTextField.text = standardTextField.text} 案例2:不起作用 @IBAction func click(_ sender: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
    }
}
另一答案

不工作getter的简单解决方案是更改文本属性:

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

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

但我不知道这是否正确......这有什么意义吗?

以上是关于UITextField没有获取属性swift 4的主要内容,如果未能解决你的问题,请参考以下文章

将 UITextField 的 inputView 属性设置为 UIPicker 在 Swift 中不起作用

如何在 Swift 中将 UITextField 文本居中

无法从 UITextField 获取文本 - Swift - iOS

如何在Swift 3中修复我的自定义UITextField对象?

使用标识符/标签 (SWIFT) 从 UIView 获取 UITextField

需要在 Swift 中的 UITextField 委托方法中引用自定义 UITableViewCell 而不使用 tag 属性