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
}()