2010-12-30 10 views
0

Ich weiß, wie ich dies mit NSTextView tun würde, aber NSTextField scheint keine Möglichkeit zum Zugriff auf die dahinter, so kann ich mich nicht festlegen als Delegierter und Prozess -textStorageDidProcessEditing:.Validieren Sie eine Benutzerschnittstelle (NSButton) als Benutzertyp in NSTextField

Ich habe eine NSTextField als Teil eines Blattes. Wenn das Textfeld zu irgendeinem Zeitpunkt leer ist, sollte die Schaltfläche OK deaktiviert werden, bis eine Eingabe bereitgestellt wird. Das ist im Grunde alles, was ich tun möchte, und ich bin mir sicher, dass es eine wirklich einfache Möglichkeit gibt, dies zu tun?

Ich habe versucht:

[[[filenameInput cell] textStorage] setDelegate:self]; 

Denken, dass NSTextFieldCell die Textspeicher zur Verfügung stellen würde (vor allem seit Xcode freundlich es für mich-Auto fertig gestellt) und dann natürlich hätte meine Validierung über die delegierte Methode:

-(void)textStorageDidProcessEditing:(NSNotification *)notification { 
    BOOL allowSubmit = ([[filenameInput stringValue] length] > 0) 
     && (([relativePathSwitch state] == NSOnState) || ([[localPathInput stringValue] length] > 0)); 
    [createButton setEnabled:allowSubmit]; 
} 

Dies kompiliert, verursacht aber einen Laufzeitfehler, da NSTextFieldCell nicht auf textStorage reagiert.

Was ist das Standardmuster, dem ich hier folgen sollte? Dies muss einer jener „jeden Tag“ Aufgaben für Cocoa Devs sein, denke ich :)

The Sheet

Antwort

2

Dies ist, was NSFormatter ist; Erstellen Sie eine Unterklasse von NSFormatter und legen Sie eine Instanz davon als den Formatierer Ihres NSTextFields fest und lassen Sie den vom Benutzer eingegebenen Text überprüfen.

+0

Danke, ich werde mir das ansehen. Klingt wie eine skalierbare Lösung. Es gibt einige Abhängigkeiten zwischen Feldern, aber ich gehe davon aus, dass dies berücksichtigt wird. Ich arbeite jetzt gerade an etwas anderem, aber ich werde es versuchen, sobald ich fertig bin und dies akzeptiere. – d11wtq

2

immer die Art und Weise ... ich es gefunden. Es ist nicht auf der Seite für NSTextFieldDelegate oder NSControlTextEditingDelegate aufgelistet, aber auf der Seite für NSControl selbst.

Die Delegiertenmethode lautet: -controlTextDidChange:.

Verwandte Themen