我正在将按钮设置为带有隐藏图标的密码文本字段。在密码中开始编辑时显示该图标。这样给定...
func textFieldDidBeginEditing(_ textField: UITextField) {
for textfield in textFields {
if textfield.tag == 1 {
textfield.isValid = true
} else {
textfield.isActive = false
}
}
}
在textfield.isValid = true
时,像这样在另一个类中调用didSet
。
var isValid: Bool = false {
didSet {
setCorrectState()
}
}
setCorrectState()
方法为
func setCorrectState() {
if self.type == .password {
addPasswordViewButton()
}
}
addPasswordViewButton()
方法如下……
private func addPasswordViewButton() {
button.setImage(UIImage(named: "hide"), for: .normal)
button.setImage(UIImage(named: "show"), for: .selected)
button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 3)
button.frame = CGRect(x: 0, y: 0, width: ((self.frame.height)), height: ((self.frame.height)))
button.addTarget(self, action: #selector(showHidePassword(_:)), for: .touchUpInside)
self.rightView = button
self.rightViewMode = .always
}
showHidePassword
给出为
@objc func showHidePassword(_ button: UIButton) {
button.isSelected = !button.isSelected
self.isSecureTextEntry = !button.isSelected
}
我在这里面临2个问题。
1。当我开始在文本字段中输入文本时,将显示隐藏图标,并且输入的文本采用安全的文本格式。现在,如果单击了隐藏图标,将显示显示图标,并且输入的文本将不再是安全文本格式。现在处于这种状态(显示显示图标的状态),如果我删除所有字符并单击另一个文本字段(此密码文本字段之外有多个文本字段),然后再次返回并单击密码文本字段并开始输入字符,则显示图标本身就显示了,而我希望在其中显示隐藏图标及其功能…
2。例如,我在密码文本字段中输入了字符“ abc”。这些现在是安全文本格式。现在显示了显示图标,如果单击它,我将能够看到输入的字符“ abc”。现在,如果输入“ def”,我将总共可以看到字符“ abcdef”。现在显示的图标是“隐藏”图标,如果我单击该图标,则文本“ abcdef”将采用安全文本格式。现在,如果我输入字符说“ g”,则不是理想地接受“ g”作为“ abcdef”的延续,而是输入“ g”作为新字符。即,整个文本“ abcdef”被删除了……可能是原因...?
答案 0 :(得分:0)
请按照以下步骤操作:
1-创建自定义类作为PasswordTextField
class PasswordTextField: UITextField {
}
2-在PasswordTextField类中创建密码眼按钮的出口作为passwordButton
@IBOutlet weak var passwordButton: UIButton!
3-在viewController上添加textField并将 PasswordTextField类从情节提要板添加到textField
4-从情节提要中添加 IBButton的密码按钮的IBOutlet连接
5-创建一个标志来处理密码显示/隐藏功能
import UIKit
class PasswordTextField: UITextField {
@IBOutlet weak var passwordButton: UIButton!
var isClicked: Bool = false {
didSet {
self.isSecureTextEntry = isClicked ? false : true
isClicked ? (passwordButton.setImage(UIImage(named: "show"), for: .normal)) : (passwordButton.setImage(UIImage(named: "hide"), for: .normal))
}
}
override func awakeFromNib() {
super.awakeFromNib()
self.isSecureTextEntry = true //set default as a isSecureTextEntry
passwordButton.setImage(UIImage(named: "hide"), for: .normal) // set image to passoword hide eye
passwordButton.addTarget(self, action: #selector(passwordButtonPressed(sender:)), for: .touchUpInside) //create target method of passwordButton
}
@objc func passwordButtonPressed(sender: UIButton) {
isClicked = !isClicked
}
}
6-完成此步骤后,您无需在ViewController中添加任何代码,只需要创建PasswordTextField插座
@IBOutlet weak var passwordTextField: PasswordTextField!