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
它。我究竟做错了什么 ?我是新手,所以我不明白......
编辑:
- 将MyTextField添加到Main.storyboard和标准textField
- 创建一个出口
@IBOutlet var myTextField: MyTextField!
和 standardTextField - 在Object Inspector 中设置我的控件的Text属性
- 我对故事板的控制正确更新,“测试文本”可见
- 添加按钮并创建动作插座 案例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 中不起作用
无法从 UITextField 获取文本 - Swift - iOS
如何在Swift 3中修复我的自定义UITextField对象?
使用标识符/标签 (SWIFT) 从 UIView 获取 UITextField
需要在 Swift 中的 UITextField 委托方法中引用自定义 UITableViewCell 而不使用 tag 属性