我有包含文本字段的自定义控件。示例代码如下所示:
@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
}}
当我在代码中创建自定义控件的导出时,我可以设置
文本属性,但无法获取
它。我究竟做错了什么 ?我是新手,所以不太明白...
编辑:
- 将 MyTextField 添加到 Main.storyboard 和标准 textField
创建一个 socket
@IBOutlet var myTextField: MyTextField!
和标准文本字段
- 我对 Storyboard的控制正确更新并且“测试文本”可见
添加按钮并创建操作导出
情况 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/