Ich lerne langsam Objective-C und Cocoa, und die einzige Möglichkeit, die wichtigsten Ereignisse in Textansichten zu erfassen, ist Delegierung zu verwenden, aber ich habe Probleme, nützliche Dokumentation und Beispiele zur Implementierung eines solchen zu finden Lösung. Kann mir jemand in die richtige Richtung zeigen oder Hilfe aus erster Hand geben?Die beste Methode, wichtige Ereignisse in NSTextView zu erfassen?
Antwort
Im Allgemeinen besteht die Art, wie Sie es implementieren, einfach darin, dem Controller Ihrer Ansicht die erforderliche Funktion hinzuzufügen und seinen Delegaten festzulegen. Wenn Sie beispielsweise beim Laden der Ansicht Code ausführen möchten, delegieren Sie Ihre Ansicht einfach an den Controller und implementieren die Funktion "watchFromNib".
So ein Tastendruck in einer Textansicht, stellen Sie sicher, dass Ihr Controller ist der Text nach Ansicht der Delegierten, zu erkennen und dann implementieren diese:
- (void)keyUp:(NSEvent *)theEvent
Beachten Sie, dass dies ist eine vererbte NSResponder Methode, kein NSTextView Methode.
Es ist wichtig, dass Sie uns mitteilen, was Sie wirklich erreichen möchten - das übergeordnete Ziel, das Sie bei der Erfassung wichtiger Ereignisse in einem NSTextView beachten.
Zum Beispiel, wenn jemand mich fragt, wie wichtige Ereignisse in einem NSText Feld erfassen, was sie wirklich wissen möchten ist, wie Eingaben im Feld zu validieren. Dies geschieht, indem der Formatierer des Feldes auf eine Instanz von NSFormatter gesetzt wird (unabhängig davon, ob einer der Formatierungen in Cocoa enthalten ist oder ein benutzerdefinierter), und nicht durch direkte Verarbeitung von Tastatureingaben.
Also dieses Beispiel, was versuchst du wirklich zu erreichen?
Ich habe etwas hart gegraben, und ich habe eine Antwort auf meine eigene Frage gefunden. Ich werde unten weitermachen, aber danke an die zwei Jungs, die geantwortet haben. Ich denke, dass Stack Overflow bereits eine fantastische Seite ist - ich hoffe, dass mehr Mac-Entwickler ihren Weg finden, sobald die Beta vorbei ist - dies könnte eine großartige Ressource für andere Entwickler sein, die auf die Plattform wechseln wollen.
Also, ich habe, wie von Danny vorgeschlagen, meine Antwort in Delegation finden. Was ich von Dannys Beitrag nicht verstand, war, dass es im delegierenden Objekt eine Reihe von delegierten Methoden gibt und dass der Delegierte diese Ereignisse implementieren muss. Und so konnte ich für eine TextView die Methode textDidChange finden, mit der ich das, was ich wollte, noch besser erreichen konnte, als einfach nur das Drücken von Tasten drücken würde. Also wenn ich dies in meinem Controller implementiere:
- (void)textDidChange:(NSNotification *)aNotification;
Ich kann auf den Text reagieren, der bearbeitet wird. Es gibt natürlich noch andere Methoden, und ich freue mich darauf, mit ihnen zu spielen, weil ich weiß, dass ich eine Menge lernen werde. Danke nochmal, Leute.
Nur ein Tipp für Syntax-Hervorhebung:
Sie den ganzen Text Ansicht nicht auf einmal markieren - es ist sehr langsam. Markieren Sie auch nicht den zuletzt bearbeiteten Text mit -editedRange - es ist auch sehr langsam, wenn der Benutzer einen großen Textkörper in die Textansicht einfügt.
Stattdessen müssen Sie den sichtbaren Text markieren, die wie dies geschehen ist:
NSRect visibleRect = [[[textView enclosingScrollView] contentView] documentVisibleRect];
NSRange visibleRange = [[textView layoutManager] glyphRangeForBoundingRect:visibleRect inTextContainer:[textView textContainer]];
Dann Sie visibleRange auf Ihre Markierung Code füttern.
- 1. WinJS: Beste Möglichkeit, wichtige Informationen zu speichern
- 2. Als Reaktion auf wichtige Ereignisse in scala
- 3. Wie können wichtige Ereignisse in einem Service erfasst werden?
- 4. Wie funktioniert die Methode automaticLinkDetectionEnabled von NSTextView?
- 5. Android GestureListener nicht Ereignisse zu erfassen
- 6. Die beste Methode zum Floaten?
- 7. Wie kann ich wichtige Ereignisse in Android senden?
- 8. Erfassen Sie alle Ereignisse (JavaScript)
- 9. Die beste Möglichkeit, um Ereignisse in C# asynchron zu machen #
- 10. erfassen Mausrad Ereignisse außerhalb qwidget
- 11. GWT: debug Ereignisse erfassen/sprudeln
- 12. Können Anweisungen in Angular2 die Ereignisse onCreate und onDestroy erfassen?
- 13. Warum erkennt Visual Studio wichtige Ereignisse vor autohotkey?
- 14. Wie werden wichtige Ereignisse erfasst, während Kandidaten in der Eingabemethode vorhanden sind?
- 15. Python und RabbitMQ - Die beste Methode, um Ereignisse von mehreren Kanälen zu hören?
- 16. Wie erfassen Sie jqGrid-Spalten, die Ereignisse ändern?
- 17. 'Underlying' div zum Erfassen 'außerhalb' Ereignisse
- 18. Wie wichtige Ereignisse zu schreiben, wenn sich der Cursor in das Textfeld ein
- 19. Überwiegt die! Wichtige Regel Medienabfragen?
- 20. Die beste Methode zum Hinzufügen von Metadaten zu HTML-Elementen
- 21. Wichtige Tipps in WPF
- 22. finden Sie wichtige Funktionen für die Klassifizierung
- 23. Beste Methode für die Reindexierung
- 24. Die beste Methode, um ein Array in C zu verschieben?
- 25. Die beste Methode, Count() in LINQ zu verwenden?
- 26. Die beste Methode, POST-Daten in Apache zu protokollieren?
- 27. Die beste Methode, um eine Protokolldatei in GO zu rollen
- 28. Die beste Methode, ServiceManager in der Modellklasse zu verwenden?
- 29. Die beste Methode, datenbankgesteuertes Menü in ASP.NET MVC zu verbinden
- 30. Was ist die beste Methode, Veriable in Java zu definieren?
keyUp wird nicht aufgerufen, wenn Sie es in den Delegaten einfügen. Sie müssen die NSTextView ableiten und dort ablegen. –