Eigenen NSUndoManager für UITextView implementieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Eigenen NSUndoManager für UITextView implementieren

    Hallo Entwickler,

    da ich Fett, Kursiv und Unterstrichen in mein TextView implementiere, nutze ich einen eigenen NSUndoManager.
    Jetzt möchte ich nach jeden getippten Buchstaben ein undo registrieren und diese gruppieren, bis eine neue Zeile angefangen wird.

    Was wäre die beste Möglichkeit dieses Vorhaben umzusetzen?
    Nach jedem einzelnen Buchstaben ein undo zu registrieren scheint ein bisschen viel zu sein. Die undo Methode würde dann für jeden einzelnen Buchstaben im Absatz ausgeführt werden, oder?
    Gibt es nicht die Möglichkeit die vorherige Undo Aktion zu überschreiben?
  • AFAIR ist der NSUndoManager sehr sehr mächtig.

    Ich würde eventuell soweit gehen alle Schritte 'Undoable' zu machen.

    1) Alle getippten Zeichen einzeln bis zum Ende des Wortes
    2) Alle Wörter einzeln bis zum Ende der Zeile
    3) Alle Zeilen einzeln

    Das müsste sich mit UndoGroups realisieren lassen.
    Du registrierst eine UndoGroup mit einem bestimmten Target für die getippten Buchstaben. Sobald Du ein Leerzeichen erhältst, registrierst Du eine UndoGroup mit einem anderen Target für die Wörter und haust alle Änderungen des Buchstaben-Targets weg. [- (void)removeAllActionsWithTarget:(id)target]
    Das machst Du so lange, bis Du ein Newline erreichst. Hier erstellst Du dann eine UndoGroup mit einem dritten Target für die Zeilen und wirfst alle Änderungen des Wörter- und Buchstaben-Targets weg.

    Wenn Du es noch weiter übertreiben möchtest, kannst Du sicherlich auch zwei aufeinanderfolgende Newline als Absatz interpretieren und dafür eine eigene UndoGroup einrichten…

    Das summiert sich natürlich. Und ich verstehe wirklich nicht, wo der Sinn dahinter ist.

    Für mich als User ist es wesentlich einfacher Dinge komplett zu markieren und neu zu schreiben als schrittweise zurück zu gehen…
    „Fix, Schwyz!“ quackt Jürgen blöd vom Paß.

    „Fix, Schwyz!“ quäkt Jürgen blöd vom Paß.

    Hinnavigieren, eventuell ein Wort ersetzen (oder zwei Buchstaben) und fertig vs. 23x UNDO und 24 Zeichen tippen...
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Danke für diese umfangreiche Antwort, ich werde es etwa in dieser Art umsetzen.
    Der Grund für diese Sache sind die Rich Text Funktionen. Wenn man einen Absatz markiert, im inputAccessoryView den Bold Button drücken will, aber aus Versehen einen Buchstaben der obersten erwischt, dann ist alles weg. Und ich möchte die Rich Text Funktionen und Textbearbeitung beide in den Undo Buttoln einbauen.