Поддержка ОС iPad UndoManager - PullRequest
       63

Поддержка ОС iPad UndoManager

0 голосов
/ 02 февраля 2020

Для отмены / возврата мы не используем UndoManager. Однако мы все еще хотели бы получить поддержку жестов. Для вырезания, копирования и вставки это просто: нам просто нужно переопределить эти методы на первом респонденте.

Для отмены / повтора я попытался переопределить undoManager и вернуть следующий класс:

class TomdoManager: UndoManager {

    override func undo() {
        print(#function)
    }

    override func redo() {
        print(#function)
    }

    internal var isUndoEnabled = false
    override var canUndo: Bool {
        print(#function)
        return true
    }

    internal var isRedoEnabled = false
    override var canRedo: Bool {
        print(#function)
        return true
    }

    override func prepare(withInvocationTarget target: Any) -> Any {
        return self
    }

    override func beginUndoGrouping() {
        print(#function)
    }

    override func endUndoGrouping() {
        print(#function)
    }

    override var groupingLevel: Int {
        print(#function)
        return 1
    }

    override func disableUndoRegistration() {
        print(#function)
    }

    override func enableUndoRegistration() {
        print(#function)
    }

    override var isUndoRegistrationEnabled: Bool {
        print(#function)
        return true
    }

//    override var groupsByEvent: Bool {
//        return true
//    }

//    override var levelsOfUndo: Int {
//        print(#function)
//        return 1
//    }

//    override var runLoopModes: [RunLoop.Mode] {
//        print(#function)
//        return [.common]
//    }

    override func undoNestedGroup() {
        print(#function)
    }

    override var isUndoing: Bool {
        print(#function)
        return false
    }

    override var isRedoing: Bool {
        print(#function)
        return false
    }

    override func removeAllActions() {
        print(#function)
    }

    override func removeAllActions(withTarget target: Any) {
        print(#function)
    }

    override func registerUndo(withTarget target: Any, selector: Selector, object anObject: Any?) {
        print(#function)
    }

    override func __registerUndoWithTarget(_ target: Any, handler undoHandler: @escaping (Any) -> Void) {
        print(#function)
    }

    override func setActionIsDiscardable(_ discardable: Bool) {
        print(#function)
    }

    override var undoActionIsDiscardable: Bool {
        print(#function)
        return true
    }

    override var redoActionIsDiscardable: Bool {
        print(#function)
        return true
    }

    override var undoActionName: String {
        print(#function)
        return "Undo"
    }

    override var redoActionName: String {
        print(#function)
        return "Redo"
    }

    override func setActionName(_ actionName: String) {
        print(#function)
    }

    override var undoMenuItemTitle: String {
        print(#function)
        return "Undo Menu"
    }

    override var redoMenuItemTitle: String {
        print(#function)
        return "Redo Menu"
    }

    override func undoMenuTitle(forUndoActionName actionName: String) -> String {
        print(#function)
        return "Undo menu action"
    }

    override func redoMenuTitle(forUndoActionName actionName: String) -> String {
        print(#function)
        return "Redo menu action"
    }
}

Когда я вызываю меню отмены / возврата одним касанием тремя пальцами, я вижу, что вызывается canUndo, но независимо от того, что я возвращаю, жесты никогда не работают и никакие другие методы не вызываются. Кроме того, когда я делаю три пальца или влево или вправо, вызывается canUndo. Никаких других методов не вызывается.

Есть идеи?

...