Pregunta

Tengo una vista de texto que recibe su contenido de una cadena con atributos almacenados en un objeto de modelo. Enumero varios de estos objetos modelo en un cajón y cuando el usuario hace clic en uno la vista de texto swaps de su contenido.

Ahora necesito cambiar también undomanager para la vista de texto. Me inicializar un administrador de deshacer en mi modelo de objetos y el uso de undoManagerForTextView para volver a la vista de texto, pero algo no está del todo bien.

declaraciones de registro colocados estratégicamente me muestran que el trabajo de todo como estaba previsto: en el arranque de un nuevo modelo de objetos es inicializado correctamente y una undomanager no nulo siempre se tira por la vista de texto. Pero cuando se trata de hacer realidad deshacer, simplemente no puedo obtener el comportamiento que quiero.

abro una ventana, tipo algo y pulse Comando + z, y deshacer las obras. Abro una ventana, escriba algo, seleccionar un nuevo modelo sobre la mesa, el tipo algo, vuelve al primer modelo y tratar de deshacer y todo lo que consigo es un pitido.

Algo en el documentación me levanto una ceja, ya que significaría que no puedo tener deshacer con varios objetos del modelo:

  

El valor predeterminado de deshacer y rehacer el comportamiento   se aplica a los campos de texto y el texto en   células, siempre que el campo o célula se   el primer nivel de respuesta (es decir, el   foco de las acciones del teclado). Una vez el   punto de inserción sale del campo o   célula, las operaciones anteriores no pueden ser   deshecho.

¿Fue útil?

Solución

Es posible que desee subclase NSUndoManager y anular removeAllActionsWithTarget: y removeAllActions, al menos que los registre, posiblemente para hacerlos no-ops.

No se olvide de crear una instancia de la subclase en lugar de la NSUndoManager originales. (Fácil de olvidar, y algunos lectores no se dan cuenta de que tienen que hacer esto.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top