Pergunta

Eu tenho uma visualização de texto que obtém seu conteúdo de uma string atribuída armazenada em um objeto modelo. Listo vários desses objetos de modelo em uma gaveta e, quando o usuário clica em um, a exibição de texto troca seu conteúdo.

Agora eu também preciso trocar o gerente de desfazer a visualização de texto. Inicializo um gerente de desfazer no meu objeto modelo e uso UndomanagerfortExtview para devolvê -lo à visualização de texto, mas algo não está certo.

Declarações de registro estrategicamente colocadas me mostram que tudo está funcionando como planejado: na inicialização, um novo objeto de modelo é inicializado corretamente e um gerente de desfazer não nulo é sempre puxado pela visualização de texto. Mas quando se trata de fazer desfazer, simplesmente não consigo obter o comportamento que quero.

Abro uma janela, digito algo e pressiono CMD+Z e desfazer as obras. Abro uma janela, digito algo, seleciono um novo modelo na tabela, digito alguma coisa, volto para o primeiro modelo e tento desfazer e tudo o que obtém é um sinal sonoro.

Algo Na documentação, me fez levantar uma sobrancelha, pois isso significaria que não posso desfazer com vários objetos modelo:

O comportamento de desfazer e refazer padrão se aplica a campos de texto e texto nas células, desde que o campo ou a célula seja o primeiro respondedor (ou seja, o foco das ações do teclado). Uma vez que o ponto de inserção sai do campo ou da célula, as operações anteriores não podem ser desfeitas.

Foi útil?

Solução

Você pode querer subclasse Nsundomanager e substituir removeAllActionsWithTarget: e removeAllActions, pelo menos para registrá-los, possivelmente para torná-los ninguém.

Não se esqueça de instanciar sua subclasse em vez do Nsundomanager original. (Fácil de esquecer, e alguns leitores podem não perceber que precisam fazer isso.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top