Frage

Ich bin langsam lernen Objective-C und Cocoa, und der einzige Weg, ich sehe so weit zu erfassen, wichtige Ereignisse in der Textansicht ist die Verwendung von delegation, aber ich habe Schwierigkeiten, die Suche nach nützlichen Dokumentation und Beispiele auf, wie eine solche Lösung zu implementieren.Kann jemand mich in die richtige Richtung oder liefern aus Erster hand helfen?

War es hilfreich?

Lösung

In der Regel, die Weise, die Sie implementieren, es ist einfach zu fügen Sie die erforderliche Funktion, um Ihre view-controller, und legen Sie deren Stellvertretung.Zum Beispiel, wenn Sie möchten, dass code ausgeführt werden, wenn die Ansicht geladen wird, werden Sie nur delegieren Ihre Sicht auf die Steuerung und Umsetzung der awakeFromNib-Funktion.

Also, zu erkennen, dass eine Taste in einem text-Ansicht, stellen Sie sicher, dass Ihre controller ist der text-Ansicht zuweisen, und dann diese umzusetzen:

- (void)keyUp:(NSEvent *)theEvent

Beachten Sie, dass dies ist eine vererbte NSResponder Methode, nicht eine NSTextView-Methode.

Andere Tipps

Nur ein Tipp für syntax highlighting:

Don ' T markieren Sie den ganzen text anzeigen auf einmal - es ist sehr langsam.Auch nicht, markieren Sie die zuletzt bearbeitete text mit -editedRange - es ist sehr langsam zu, wenn der Benutzer fügt eine große Menge an text in die text-Ansicht.

Stattdessen markieren Sie den sichtbaren text ist wie folgt:

NSRect visibleRect = [[[textView enclosingScrollView] contentView] documentVisibleRect];
NSRange visibleRange = [[textView layoutManager] glyphRangeForBoundingRect:visibleRect inTextContainer:[textView textContainer]];

Dann füttern Sie visibleRange, um Ihre code-Hervorhebung.

Es ist wichtig, uns zu sagen, was Sie wirklich erreichen wollen — das übergeordnete Ziel, dass Sie denken, capturing key events in einer NSTextView-Adresse.

Zum Beispiel, wenn mich jemand fragt, wie man Auslöser von Ereignissen in einer NSTextFeld was Sie wirklich wissen wollen ist, wie zu überprüfen die Eingabe in das Feld ein.Dies erfolgt durch Einstellung des Felds formatter zu einer Instanz von NSFormatter (egal ob man die Formatierungen enthalten in Kakao oder einer eigenen), nicht durch die Verarbeitung von Tastatureingaben direkt.

So gegeben, dass Beispiel, was Sie wirklich erreichen wollen?

Ich habe einige schwer zu Graben, und ich habe eine Antwort auf meine eigene Frage.Ich werde es unten, aber Dank der beiden Kerle, die antwortete.Ich denke, dass Stack Overflow ist eine fantastische Website schon--ich hoffe, dass Mac-Entwickler, Ihren Weg zu finden, sobald die beta ist vorbei-dies könnte eine gute Ressource für andere Entwickler zu suchen, um den übergang zu der Plattform.

Also, ich habe, wie vorgeschlagen von Danny, meine Antwort finden Sie in delegation.Was ich nicht verstehe von Danny ' s post-war, dass es eine Reihe von Delegierten-fähigen Methoden in der delegierende Objekt, und dass die Delegaten implementieren müssen, sagte der Ereignisse.Und damit für eine TextView, die ich finden konnte, die Methode textDidChange, die erreicht, was ich wollte, in eine noch bessere Möglichkeit, als einfach erfassen-Taste drückt getan hätte.Also, wenn ich die Umsetzung dieser in meinem controller:

- (void)textDidChange:(NSNotification *)aNotification;

Ich kann eine Antwort auf den text, der bearbeitet wird.Es gibt natürlich auch andere Methoden zur Verfügung, und ich bin begeistert, mit Ihnen zu spielen, weil ich weiß, ich werde lernen, eine ganze Menge, wie ich es Tue.Nochmals vielen Dank, Jungs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top