Macos 我可以隐藏/显示NSTextField/NSSecureTextField吗
有没有办法在Cocoa中打开和关闭secureTextField?(OSX)。我希望用户可以选择查看他们的密码 在iOS中,我可以做类似于[textField setsecurettentry:YES]的事情 我找到了[secureTextField setEchoBullets],但这不是我想要的Macos 我可以隐藏/显示NSTextField/NSSecureTextField吗,macos,nstextfield,Macos,Nstextfield,有没有办法在Cocoa中打开和关闭secureTextField?(OSX)。我希望用户可以选择查看他们的密码 在iOS中,我可以做类似于[textField setsecurettentry:YES]的事情 我找到了[secureTextField setEchoBullets],但这不是我想要的 谢谢你的帮助 我认为您需要一个NSTextField和一个NSSecureTextField。您可以将它们放在一个表SNSTabView中,以使它们之间的切换更加容易。对于我来说,在同一个NSTex
谢谢你的帮助 我认为您需要一个
NSTextField
和一个NSSecureTextField
。您可以将它们放在一个表SNSTabView
中,以使它们之间的切换更加容易。对于我来说,在同一个NSTextField中有两个不同的单元格并在它们之间切换是完美的
void osedit_set_password_mode(OSEdit *edit, const bool_t password_mode)
{
OSXEdit *ledit = (OSXEdit*)edit;
cassert_no_null(ledit);
if (password_mode == TRUE)
{
if ([ledit cell] == ledit->cell)
{
[ledit->scell setStringValue:[ledit->cell stringValue]];
[ledit->scell setBackgroundColor:[ledit->cell backgroundColor]];
[ledit->scell setTextColor:[ledit->cell textColor]];
[ledit->scell setAlignment:[ledit->cell alignment]];
[ledit->scell setFont:[ledit->cell font]];
[ledit setCell:ledit->scell];
}
}
else
{
if ([ledit cell] == ledit->scell)
{
[ledit->cell setStringValue:[ledit->scell stringValue]];
[ledit->cell setBackgroundColor:[ledit->scell backgroundColor]];
[ledit->cell setTextColor:[ledit->scell textColor]];
[ledit->cell setAlignment:[ledit->scell alignment]];
[ledit->cell setFont:[ledit->scell font]];
[ledit setCell:ledit->cell];
}
}
}
接口
@interface OSXEdit : NSTextField
{
@public
NSTextFieldCell *cell;
NSSecureTextFieldCell *scell;
}
@end
构造器
OSEdit *osedit_create()
{
OSXEdit *edit = nil;
NSTextFieldCell *cell = nil;
edit = [[OSXEdit alloc] initWithFrame:NSZeroRect];
cell = [edit cell];
[cell setEditable:YES];
[cell setSelectable:YES];
[cell setBordered:YES];
[cell setBezeled:YES];
[cell setDrawsBackground:YES];
edit->cell = [cell retain];
edit->scell = [[NSSecureTextFieldCell alloc] init];
[edit->scell setEchosBullets:YES];
[edit->scell setEditable:YES];
[edit->scell setSelectable:YES];
[edit->scell setBordered:YES];
[edit->scell setBezeled:YES];
[edit->scell setDrawsBackground:YES];
return (OSEdit*)edit;
}
和析构函数
void osedit_destroy(OSEdit *edit)
{
OSXEdit *ledit = (OSXEdit*)edit;
[ledit->cell release];
[ledit->scell release];
[ledit release];
}
真奇怪。但是谢谢-我在可可邮件列表上得到了相同的答案..我意识到我可以做到:1。仅使用一个NSTextField和2。如果(隐藏我)textField.stringValue=@“*******”;我遗漏了什么吗?我认为这是一个更安全的解决方案:@davidelmonte,你遗漏的是,有些人会想在安全字段中键入密码,而不会显示纯文本。有趣的是,迈克·阿卜杜拉的解决方案在概念上是类似的,但交换的是单元格而不是整个控件。我不知道为什么它更“安全”。什么是OSEdit类?另外,NSTextField似乎没有成员“cell”。OSEdit只是OSXEdit上的C包装器,可以在纯C应用程序中使用Cocoa对象。OSXEdit源于NSTextField并实现了两个单元:普通单元(它自己的单元)和安全单元。每个时刻只有一个活动单元格,但OSXEdit保留指向这两个单元格的指针。目标在正常和安全状态之间切换,就像它是NSTextField的属性一样。在Windows中,这是可能的<代码>发送消息(hwnd,EM_SETPASSWORDCHAR,(WPARAM)L'•',(LPARAM)0)代码>