我正在 Swift 中开发自定义 UIView 扩展,该扩展添加了一个带有 isSecureTextEntry = true 的 UITextField 作为子视图以防止屏幕截图。UITextField 已成功添加,我可以配置...
我正在 Swift 中开发一个自定义 UIView 扩展,它添加了一个带有 isSecureTextEntry = true 的 UITextField 作为子视图以防止屏幕截图。UITextField 已成功添加,我可以通过调试打印确认这一点。但是,当我尝试使用同一扩展中的方法删除此 UITextField 时,始终找不到 UITextField,因此它永远不会被删除。我的调试打印确认负责删除的方法从未进入应该找到并删除 UITextField 的条件。
我再次检查了 UITextField 是否分配了正确的标签,并且视图层次结构似乎正确。尽管如此,viewWithTag 方法在尝试删除 UITextField 时似乎找不到它。
以下是该代码的简化版本:
extension UIView {
private struct Constants {
static var secureTextFieldTag: Int { 54321 }
}
func setScreenCaptureProtection() {
if viewWithTag(Constants.secureTextFieldTag) is UITextField {
return
}
guard superview != nil else {
for subview in subviews {
subview.setScreenCaptureProtection()
}
return
}
let secureTextField = UITextField()
secureTextField.backgroundColor = .clear
secureTextField.translatesAutoresizingMaskIntoConstraints = false
secureTextField.tag = Constants.secureTextFieldTag
secureTextField.isSecureTextEntry = true
insertSubview(secureTextField, at: 0)
secureTextField.isUserInteractionEnabled = false
layer.superlayer?.addSublayer(secureTextField.layer)
secureTextField.layer.sublayers?.last?.addSublayer(layer)
secureTextField.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true
secureTextField.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true
secureTextField.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 0).isActive = true
secureTextField.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: 0).isActive = true
}
func removeScreenCaptureProtection() {
if let secureTextField = viewWithTag(Constants.secureTextFieldTag) as? UITextField {
secureTextField.removeFromSuperview()
} else {
for subview in subviews {
subview.removeScreenCaptureProtection()
}
}
}}
感谢您的帮助!。
为什么我无法删除作为子视图添加的安全 UITextField 以防止在我的自定义 UIView 扩展中屏幕截图?
下载声明:
本站所有软件和资料均为软件作者提供或网友推荐发布而来,仅供学习和研究使用,不得用于任何商业用途。如本站不慎侵犯你的版权请联系我,我将及时处理,并撤下相关内容!