用NSSecureTextField和NSTextField重疊實現可見輸入的密碼

想實現這樣一個NSTextField,當選擇了隱藏密碼時,該文本框中的內容顯示成NSSecureTextField的樣子;當選擇不隱藏時,該文本框的內容按照標準NSTextField內容顯示。

效果如圖:隱藏密碼時:


不隱藏密碼時:



剛開始試圖重載NSTextFieldCell,在drawWithFrame中根據是否顯示密碼的標識來更改cell,然後使用setcell動態加載。

這樣做NSTextField不僅消失了邊框,而且無法輸入。

後面我想了一個很笨的方法來實現:即在界面上顯示NSTextField的地方,重疊一個NSSecureTextField和一個NSTextField。

當需要隱藏密碼時,隱藏NSTextField,顯示NSSecureTextField,並將後者設置成firstResponder。

反之,採用類似的設定。

下面將具體實現描述一下:

首先在xib文件中將NSTextField,NSSecureTextField,checkBox Button,用來說明的label等擺放好。

然後在.h文件中加入聲明,並完成xib中控件與.h中標識的鏈接。

其中NSTextField和NSSecureTextField重疊在一起,但是各自有不同的標識,分別爲_textField和_secureTextField.

checkBox的動作綁定checkHideCode。

@interface ShowSecureTextAppDelegate : NSObject <NSApplicationDelegate> {
        NSWindow *window;
	IBOutlet NSSecureTextField *_secureTextField;
	IBOutlet NSTextField *_textField;
	IBOutlet NSButton *_chkBtn;
}
-(IBAction)checkHideCode:(id)sender;

在.m文件中的代碼如下:

默認是隱藏密碼。

-(void)awakeFromNib
{
	[_textField setHidden:YES];
	[_secureTextField setHidden:NO];
	[_secureTextField becomeFirstResponder];
	[_chkBtn setState:NSOnState];
}

-(IBAction)checkHideCode:(id)sender
{
	if ([_chkBtn state] == NSOnState) 
	{
		NSString *str = [_textField stringValue];
		[_textField setHidden:YES];
		[_secureTextField setHidden:NO];
		[_secureTextField setStringValue:str];
		[_secureTextField becomeFirstResponder];
	}
	else 
	{
		NSString *str = [_secureTextField stringValue];
		[_secureTextField setHidden:YES];
		[_textField setHidden:NO];
		[_textField setStringValue:str];
		[_textField becomeFirstResponder];
	}

}

ok。保存編譯運行。隨意點擊checkBox,可以查看和隱藏密碼啦。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章