2014-02-08 70 views
3

有沒有辦法在cocoa中打開和關閉secureTextField? (OSX)。我希望用戶可以選擇查看他們的密碼。可可我可以隱藏/顯示NSTextField/NSSecureTextField

在iOS中,我可以做一些像[textField setSecureTextEntry:YES];

我發現[secureTextField setEchoBullets]但這不是我想要的。

任何幫助表示讚賞。

回答

3

我認爲你需要同時有NSTextFieldNSSecureTextField。您可以將它們放在一張桌子NSTabView中,以便在它們之間切換更容易一些。

+0

這是非常奇怪的。但是,謝謝 - 我在Cocoa郵件列表上得到了同樣的答案。 –

+0

我意識到我可以這樣做:1.只使用NSTextField,2. if(隱藏我)textField.stringValue = @「****** 「;有什麼我失蹤? –

+0

我認爲這是更安全的解決方案:http://www.mikeabdullah.net/kspasswordfield.html –

0

對於我來說,完美的做法是在同一個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]; 
} 
相關問題