我正在寻找一种当UITextField的secureTextEntry值更改时获取回调或事件的方法。
我需要这个的原因如下。
我扩展了UITextField,使其具有通过UITextField内部的按钮打开和关闭secureTextEntry的功能。在我的一个视图中,我有两个UITextField,并且我希望控制第一个UITextField上的secureTextEntry状态的按钮也可以更改另一个UITextField上的secureTextEntry。我认为最好的方法是在视图控件本身中获取回调并切换其他UITextField,但我找不到为UITextField.secureTextEntry更改获取回调的方法。
答案 0 :(得分:2)
在自定义UITextfield
类内部
override var isSecureTextEntry:Bool {
didSet {
// do next
}
}
//
let myTextF = UITextField()
var myObserve:NSKeyValueObservation?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from
myObserve = myTextF.observe(\.isSecureTextEntry) { [weak self] (textF , change) in
print("changed")
}
}
答案 1 :(得分:2)
另一种解决方案。创建一个协议,其中包含将在isSecureTextEntry更改时用作回调的函数。触发函数后,让ViewController遵守该协议,检查哪个文本字段并执行您要对其他文本字段执行的操作
示例代码
CustomTextField.swift
import UIKit
protocol SecureEntryToggleDelagte {
func didChangedSecureTextEntry(of textField: CustomTextField, isSecure: Bool)
}
class CustomTextField: UITextField {
override var isSecureTextEntry: Bool{
didSet{
secureEntryDelegate?.didChangedSecureTextEntry(of: self, isSecure: isSecureTextEntry)
}
}
var secureEntryDelegate: SecureEntryToggleDelagte?
}
ViewController
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textFieldOne: CustomTextField!
@IBOutlet weak var textFieldTwo: CustomTextField!
override func viewDidLoad() {
super.viewDidLoad()
textFieldOne.secureEntryDelegate = self
textFieldTwo.secureEntryDelegate = self
}
@IBAction func toggleTextFieldOne(_ sender: Any){
textFieldOne.isSecureTextEntry = !textFieldOne.isSecureTextEntry
}
@IBAction func toggleTextFieldTwo(_ sender: Any){
textFieldTwo.isSecureTextEntry = !textFieldTwo.isSecureTextEntry
}
}
extension ViewController: SecureEntryToggleDelagte{
func didChangedSecureTextEntry(of textField: CustomTextField, isSecure: Bool) {
if textField == textFieldOne{
print("textFieldOne isSecureTextEntry \(isSecure)")
}else if textFieldTwo == textFieldTwo{
print("textFieldTwo isSecureTextEntry \(isSecure)")
}
}
}