2010-08-13 8 views
7

In meiner iOS-Anwendung Schnittstelle habe ich explizite undo & Redo-Taste (Shake-to-Rückgängig ist eine ziemlich schwergewichtige Aktion und in diesem Zusammenhang, Undos sind ziemlich häufig durchgeführt). Normalerweise würde ich KVO verwenden, um die cundUndo- und canRedo-Schlüsselpfade von NSUndoManager zu beobachten und & die Schaltflächen zu deaktivieren, wenn die Benachrichtigungen eingehen. Leider scheint NSUndoManager für diese Schlüsselpfade nicht KVO-konform zu sein - oder zumindest ich Ich sehe nichts in Bezug auf Benachrichtigungen.NSUndoManager und Aktivieren/Deaktivieren einer Rückgängig-Taste

Also meine Frage ist: Wie bekomme ich das funktioniert? Mache ich es nur falsch mit KVO? (Ich habe doppelte & dreifach überprüft, aber es gibt immer diese Möglichkeit). Gibt es einen anderen Weg, an den ich nicht denke? (Ich habe allerdings nur den Wert von -canUndo überprüft, jedes Mal, wenn sich der Runloop dreht, aber das hat irgendwie einen schlechten Code-Geruch für mich).

(Beachten Sie, dass es durchaus möglich ist, dass NSUndoManager auf dem iOS und Mac OS X anders ist, so glaube ich nicht „Es auf dem Mac funktioniert“ eine hilfreiche Antwort sein wird, in diesem Fall)

Antwort

12

Registrieren Sie sich für NSUndoManagerDidUndoChangeNotification und Freunde von NSUndoManager, um zu prüfen, wann neue Rückgängiggruppen erstellt und aus dem Stapel entfernt werden, und aktualisieren Sie die Status Ihrer Schaltfläche entsprechend.

+3

Awesome - NSUndoManagerWillCloseUndoGroupNotification ist die, die ich zuvor verpasst hatte. Alles ergibt jetzt Sinn. Danke @aclark. –

+1

Eine letzte Folge: Das alles hat perfekt funktioniert. –

+0

Die Dokumentation sagt: "Posted vor einem' NSUndoManager' Objekt schließt eine Rückgängig-Gruppe, die in der Implementierung der 'endUndoGrouping' Methode auftritt.". Ich kann jedoch bestätigen, dass es veröffentlicht wird, wenn Sie einen einzelnen Undo registrieren (z. B. mit '-registerUndoWithTarget: selector: object:'). Sehr nützlich, um 'canUndo' auf' notification.object' ('NSUndoManager') aufzurufen und die Schaltfläche" Rückgängig "in der Benutzeroberfläche zu aktivieren/deaktivieren. –

Verwandte Themen