2017-10-22 15 views
1

のために働いていないことは、私が持っているものです:セキュアテキスト.echosbulletsは、パスワードフィールドここ

@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 
    } 
} 

すべてが弾丸をエコーとエコーの間で状態を変更しませんパスワードフィールド内のテキストを除いて、正常に動作しているようです実際のテキストすべてが正しくリンクされています - セルはテキストフィールド内にあり、パスワードボタンはビューにあり、コンセントは機能します。私はこれがMacのSwiftの別のものであるかどうか疑問に思っています。< iOSの場合のSwift。

EDIT:誰もがそれを見て気にしなければならないここで、最終的な解決策である:

@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は、ビュー内の同じサイズと位置している - 1のままにすべての回で隠されました重複を避ける。ユーザーがpasswordまたはvisPswdフィールドに値を入力すると、チェックボックスの状態が変更されると、他のフィールドと同期します。

答えて

1

セキュリティフィールドの上に2番目のテキストフィールドを追加することができます。チェックボックスに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 = !showPassword.isHidden 
     password.isHidden = !password.isHidden 
     if !showPassword.isHidden { 
      showPassword.stringValue = password.stringValue 
      showPassword.becomeFirstResponder() 
     } else { 
      password.stringValue = showPassword.stringValue 
      password.becomeFirstResponder() 
     } 
    } 
} 

show/hide password sample

+1

:あなたの実装では、次のようなもののようになります。 – Ckacmaster