如何在Swift中切换UITextField安全文本条目(隐藏密码)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Swift中切换UITextField安全文本条目(隐藏密码)?相关的知识,希望对你有一定的参考价值。
使用此代码,
iconClick是bool变量,或者你需要其他条件检查它,
var iconClick = true
眼动作方法:
@IBAction func iconAction(sender: AnyObject) {
if(iconClick == true) {
passwordTF.secureTextEntry = false
} else {
passwordTF.secureTextEntry = true
}
iconClick = !iconClick
}
希望它有所帮助
正如其他人所说,该属性是secureTextEntry
,但你不会在UITextField
文档中找到它,因为它实际上是由UITextField
通过UITextInputTraits
协议继承的 - https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextInputTraits_Protocol/#//apple_ref/occ/intfp/UITextInputTraits/secureTextEntry
您可以在每次点击按钮时简单地切换此值:
@IBAction func togglePasswordSecurity(sender: UIButton) {
self.passwordField.secureTextEntry = !self.passwordField.secureTextEntry
}
试试这一行:
@IBAction func btnClick(sender: AnyObject) {
let btn : UIButton = sender as! UIButton
if btn.tag == 0{
btn.tag = 1
textFieldSecure.secureTextEntry = NO
}
else{
btn.tag = 0
textFieldSecure.secureTextEntry = NO;
}
}
这是你的答案,不需要采取任何bool var:
@IBAction func showHideAction(sender: AnyObject) {
if tfPassword.secureTextEntry{
tfPassword.secureTextEntry = false
}else{
tfPassword.secureTextEntry = true;
}
}
首先你需要为不同状态(选定或正常)设置眼睛按钮的图像(可见或隐藏)
比连接IBAction和编写代码一样
@IBAction func btnPasswordVisiblityClicked(_ sender: Any) {
(sender as! UIButton).isSelected = !(sender as! UIButton).isSelected
if (sender as! UIButton).isSelected {
txtfPassword.isSecureTextEntry = false
} else {
txtfPassword.isSecureTextEntry = true
}
}
在Swift 4中
var iconClick : Bool!
override func viewDidLoad() {
super.viewDidLoad()
iconClick = true
}
@IBAction func showHideAction(_ sender: Any)
{
let userPassword = userPasswordTextFiled.text!;
if(iconClick == true) {
userPasswordTextFiled.isSecureTextEntry = false
iconClick = false
} else {
userPasswordTextFiled.isSecureTextEntry = true
iconClick = true
}
}
如果你需要在多个地方具有类似功能的TextField,最好将UITextField
子类化为下面的示例 -
import UIKit
class UIShowHideTextField: UITextField {
let rightButton = UIButton(type: .custom)
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
required override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
func commonInit() {
rightButton.setImage(UIImage(named: "password_show") , for: .normal)
rightButton.addTarget(self, action: #selector(toggleShowHide), for: .touchUpInside)
rightButton.frame = CGRect(x:0, y:0, width:30, height:30)
rightViewMode = .always
rightView = rightButton
isSecureTextEntry = true
}
@objc
func toggleShowHide(button: UIButton) {
toggle()
}
func toggle() {
isSecureTextEntry = !isSecureTextEntry
if isSecureTextEntry {
rightButton.setImage(UIImage(named: "password_show") , for: .normal)
} else {
rightButton.setImage(UIImage(named: "password_hide") , for: .normal)
}
}
}
之后你可以在任何ViewController中使用它,
class ViewController: UIViewController {
@IBOutlet var textField: UIShowHideTextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.becomeFirstResponder()
}
}
赋值从YES/NO
变为true/false
布尔值。
password.secureTextEntry = true //Visible
password.secureTextEntry = false //InVisible
你可以尝试这个代码..我认为这是有帮助的。
使用带眼睛图像的按钮 并制作buttonHandler方法 为值为1的按钮设置标记
-(IBAction) buttonHandlerSecureText:(UIButton *)sender{
if(sender.tag ==1){
[self.textField setSecureTextEntry:NO];
sender.tag = 2;
}
else{
[self.textField setSecureTextEntry:YES];
sender.tag = 1;
}
}
对于Xamarin人:
passwordField.SecureTextEntry = passwordField.SecureTextEntry? passwordField.SecureTextEntry = false:passwordField.SecureTextEntry = true;
在swift 4中尝试此代码,尝试在控制器中创建可重用的代码。我在故事板中为按钮设置了不同的图像,如链接https://stackoverflow.com/a/47669422/8334818所示
@IBAction func clickedShowPassword(_ sender: UIButton) {
var textField :UITextField? = nil
print("btn ",sender.isSelected.description)
switch sender {
case encryptOldPswdBtn:
encryptOldPswdBtn.isSelected = !encryptOldPswdBtn.isSelected
textField = oldPasswordTextField
default:
break
}
print("text ",textField?.isSecureTextEntry.description)
textField?.isSecureTextEntry = !(textField?.isSecureTextEntry ?? false)
}
为什么要使用额外的var
。在眼睛按钮的动作方法中,只需执行以下操作
password.secureTextEntry = !password.secureTextEntry
UPDATE
Swift 4.2(根据@ROC评论)
password.isSecureTextEntry.toggle()
@objc func togglePasscode(){
switch textfield.isSecureTextEntry{
case true: textfield.isSecureTextEntry = false
case false: textfield.isSecureTextEntry = tree
}
}
使用Switch语句,这是一个简单易读的解决方案。
Shortest!
我认为这是安全进入以及更新按钮图片的最短解决方案。
@IBAction func toggleSecureEntry(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
textfieldPassword.isSecureTextEntry = !sender.isSelected
}
根据所选状态/默认分配按钮的显示/隐藏图片,无需创建任何变量或插座。
这种意外的副作用是,如果用户切换到不安全状态,然后返回到安全状态,则在用户继续键入时将清除现有文本。除非我们重置所选的文本范围,否则光标也可能会以错误的位置结束。
下面是一个处理这些情况的实现(Swift 4)
extension UITextField {
func togglePasswordVisibility() {
isSecureTextEntry = !isSecureTextEntry
if let existingText = text, isSecureTextEntry {
/* When toggling to secure text, all text will be purged if the user
continues typing unless we intervene. This is prevented by first
deleting the existing text and then recovering the original text. */
deleteBackward()
if let textRange = textRange(from: beginningOfDocument, to: endOfDocument) {
replace(textRange, withText: existingText)
}
}
/* Reset the selected text range si以上是关于如何在Swift中切换UITextField安全文本条目(隐藏密码)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中自动移动到下一个 UITextField
如何在 swift 中部分屏蔽 UITextField 文本?
如何在 Swift 中使用 UITextField 从图像中提取特定文本?
如何在 Swift 中防止 UITextField 中出现空白或空格?