Inspiriert von der großen Antwort von Jon Steinmetz habe ich das folgende Beispiel erstellt.
Ich fügte eine NSSecureTextField
der Anwendungsansicht hinzu und verband sie mit der IBOutlet
der Mitgliedsvariablen, die ich in AppDelegate
platzierte.
@implementation AppDelegate
@synthesize password = m_password;
- (void)awakeFromNib {
assert(m_password);
self.password.backgroundColor = [NSColor blackColor];
}
Dann habe ich eine benutzerdefinierte NSSecureTextField
Klasse. Mir ist aufgefallen, dass es in einigen Fällen nicht reicht, die Farben in awakeFromNib
einzustellen, aber ich kann keinen Grund dafür nennen.
@implementation CustomSecureTextField
- (void)customize {
// Customize the text and caret color.
NSColor* foregroundColor = [NSColor whiteColor];
self.textColor = foregroundColor;
[[self.cell fieldEditorForView:self] setInsertionPointColor:foregroundColor];
}
- (void)awakeFromNib {
[self customize];
}
- (void)textDidBeginEditing:(NSNotification*)notification {
// Called when the user inputs a character.
[self customize];
}
- (void)textDidEndEditing:(NSNotification*)notification {
// Called when the user clicks into the field for the first time.
[self customize];
}
- (void)textDidChange:(NSNotification*)notification {
// Just in case ... for the paranoid programmer!
[self customize];
}
@end
Hinweis: Obwohl, ich verstehe nicht, warum die Hintergrundfarbe nicht eingestellt werden kann, wenn ich es wie mit den textColor
in der abgeleiteten Klasse zu tun. Das würde erlauben, die IBOutlet
und die Mitgliedsvariable loszuwerden.
No. Die beste Wette NSTextField Unterklasse ist nennen, wie uliwitness beschrieben, unten. – Bryan