swift - 安全文本 .echosbullets 不适用于密码字段

标签 swift macos nstextfield

这是我得到的:

@IBOutlet weak var password: NSSecureTextField! 
@IBOutlet weak var shwpswd: NSButton! //Checkbox
@IBOutlet weak var pswdcell: NSSecureTextFieldCell! //Cell


@IBAction func shwpswd(_ sender: Any) {
    if(shwpswd.state == 1) {
        pswdcell.echosBullets = false // Turn the Secure text into regular text
    }
    else if(shwpswd.state == 0) {
        pswdcell.echosBullets = true // Secure text
    }
}

一切似乎都运行良好,除了密码字段中的文本不会改变回显项目符号和回显真实文本之间的状态。所有内容也都正确链接在一起 - 单元格位于文本字段内,密码按钮位于 View 中,并且 socket 可以工作。我想知道这是否是另一个“Swift on mac < Swift on iOS case”。

编辑:这是最终的解决方案,如果有人想看的话:

@IBOutlet weak var shwpswd: NSButton! //Checkbox
@IBOutlet weak var visPswd: NSTextfield! //hidden regular box to show chars
@IBOutlet weak var password: NSSecureTextField!    //visible initial secure box
@IBAction func shwpswd(_ sender: Any) {
    if(shwpswd.state == 1) {
        self.visPswd.stringValue = self.password.stringValue //Sync both the text fields
        self.password.isHidden = true //hide the secure field
        self.visPswd.isHidden = false //show the real character echo field
    }
    else if(shwpswd.state == 0) {
        self.password.stringValue = self.visPswd.stringValue //Sync the two
        self.password.isHidden = false // Inverse of above
        self.visPswd.isHidden = true
    }
}

请注意,文本字段 passwordvisPswd 在 View 中的大小和位置相同 - 其中一个始终保持隐藏以避免重叠。当用户在 passwordvisPswd 字段中输入值时,当复选框状态更改时,它会与另一个字段同步。

最佳答案

您可以在安全字段顶部添加第二个文本字段来完成您想要的操作。将 IBAction 添加到复选框以切换字段 isHidden 属性并复制其他 textField stringValue 并使其成为第一响应者。您的实现应该如下所示:

import Cocoa

class ViewController: NSViewController {
    @IBOutlet weak var password: NSSecureTextField!
    @IBOutlet weak var showPassword: NSTextField!
    @IBOutlet weak var shwpswd: NSButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        shwpswd.state = .off
        showPassword.isHidden = true
    }
    override func viewDidAppear() {
        super.viewDidAppear()
        password.window?.makeFirstResponder(password)
    }
    @IBAction func showHidePassword(_ sender: NSButton) {
        showPassword.isHidden.toggle()
        password.isHidden.toggle()
        if !showPassword.isHidden {
            showPassword.stringValue = password.stringValue
            showPassword.becomeFirstResponder()
        } else {
            password.stringValue = showPassword.stringValue
            password.becomeFirstResponder()
        }
    }
}

show/hide password sample

关于swift - 安全文本 .echosbullets 不适用于密码字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57184436/

相关文章:

Swift Beacon 现在不能使用 Swift 3.0

iOS插入数据库

java - 在 MacBook Pro 上使用 Eclipse 创建支持 Retina 的程序

ios - 如何指定 cocoa pod Assets 目标

swift - 从字符串格式文件路径访问 os x 应用程序包之外的文件

objective-c - -mountedLocalVolumePaths 和 -mountedRemovableMedia 在 Obj-C 中做了什么

ios - 构建机器无法识别配置文件

objective-c - 两个类之间的 IBOutlets 属性不保留。解除分配?

swift - NSTextField 掩码 (Swift 2.2)

cocoa - NSTextField 编辑合并