Swift 在 UITextField.secureTextEntry 改变它的值时得到回调
Swift get callback when UITextField.secureTextEntry changes it`s value
我正在寻找一种方法来在其中一个 UITextFields secureTextEntry 更改值时获得回调或事件。
我需要这个的原因如下。
我扩展了 UITextField 使其具有通过 UITextField 内的按钮打开和关闭 secureTextEntry 的功能。在我的一个视图中,我有两个 UITextField,我希望控制第一个 UITextField 上的 secureTextEntry 状态的按钮也更改另一个 UITextField 上的 secureTextEntry。我认为最好的方法是在视图控件本身中获取回调并切换另一个 UITextField 但我找不到获取 UITextField.secureTextEntry 更改回调的方法。
自定义里面UITextfield
class
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")
}
}
另一种解决方案。创建一个协议,其中包含将在 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)")
}
}
}
我正在寻找一种方法来在其中一个 UITextFields secureTextEntry 更改值时获得回调或事件。
我需要这个的原因如下。
我扩展了 UITextField 使其具有通过 UITextField 内的按钮打开和关闭 secureTextEntry 的功能。在我的一个视图中,我有两个 UITextField,我希望控制第一个 UITextField 上的 secureTextEntry 状态的按钮也更改另一个 UITextField 上的 secureTextEntry。我认为最好的方法是在视图控件本身中获取回调并切换另一个 UITextField 但我找不到获取 UITextField.secureTextEntry 更改回调的方法。
自定义里面UITextfield
class
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")
}
}
另一种解决方案。创建一个协议,其中包含将在 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)")
}
}
}