UITextField 不在设备上调用 editingChanged 但在模拟器上工作
UITextField not calling editingChanged on device but works on simulator
我在 UICollectionViewCell
中设置了 UITextField
。我使用闭包声明 UITextField 如下:
var nameTextField: UITextField = {
let textfield = UITextField()
textfield.backgroundColor = .clear
textfield.borderStyle = .line
textfield.placeholder = "Name"
textfield.textColor = UIColor.white
textfield.layer.borderColor = UIColor.white.cgColor
textfield.addTarget(self, action: #selector(textfieldDidChangeValue), for: .editingChanged)
textfield.translatesAutoresizingMaskIntoConstraints = false
return textfield
}()
假设当textfield的内容改变时,会调用.editingChanged
事件,然后调用函数textfieldDidChangeValue
。它在 iOS 模拟器中运行良好,但在我的真实 iPhone 12 Pro 设备中无法运行。这是我第一次面对模拟器和真实设备之间行为不同的问题。可能的解决方法是什么?谢谢。
Xcode:版本 13.3.1 (13E500a)
iOS 模拟器: iOS 14.7 iPhone 13 pro
真实设备:iOS14.7.1iPhone12 pro
我终于弄清楚为什么在声明 UITextField
时它对 addTarget
不起作用。因为添加目标时 self
还没有准备好。我应该使变量 lazy
以保证 self
可用。
lazy var nameTextField: UITextField = {
let textfield = UITextField()
textfield.backgroundColor = .clear
textfield.borderStyle = .line
textfield.placeholder = "Name"
textfield.textColor = UIColor.white
textfield.layer.borderColor = UIColor.white.cgColor
textfield.addTarget(self, action: #selector(textfieldDidChangeValue), for: .editingChanged)
textfield.translatesAutoresizingMaskIntoConstraints = false
return textfield
}()
我在 UICollectionViewCell
中设置了 UITextField
。我使用闭包声明 UITextField 如下:
var nameTextField: UITextField = {
let textfield = UITextField()
textfield.backgroundColor = .clear
textfield.borderStyle = .line
textfield.placeholder = "Name"
textfield.textColor = UIColor.white
textfield.layer.borderColor = UIColor.white.cgColor
textfield.addTarget(self, action: #selector(textfieldDidChangeValue), for: .editingChanged)
textfield.translatesAutoresizingMaskIntoConstraints = false
return textfield
}()
假设当textfield的内容改变时,会调用.editingChanged
事件,然后调用函数textfieldDidChangeValue
。它在 iOS 模拟器中运行良好,但在我的真实 iPhone 12 Pro 设备中无法运行。这是我第一次面对模拟器和真实设备之间行为不同的问题。可能的解决方法是什么?谢谢。
Xcode:版本 13.3.1 (13E500a)
iOS 模拟器: iOS 14.7 iPhone 13 pro
真实设备:iOS14.7.1iPhone12 pro
我终于弄清楚为什么在声明 UITextField
时它对 addTarget
不起作用。因为添加目标时 self
还没有准备好。我应该使变量 lazy
以保证 self
可用。
lazy var nameTextField: UITextField = {
let textfield = UITextField()
textfield.backgroundColor = .clear
textfield.borderStyle = .line
textfield.placeholder = "Name"
textfield.textColor = UIColor.white
textfield.layer.borderColor = UIColor.white.cgColor
textfield.addTarget(self, action: #selector(textfieldDidChangeValue), for: .editingChanged)
textfield.translatesAutoresizingMaskIntoConstraints = false
return textfield
}()