Pregunta

Tengo una NSTextView en un NSScrollView, y estoy programación inserción de una subclase NSView como una vista secundaria de la NSTextView. Este NSView actúa como una superposición, la superposición de información gráfica sobre el texto debajo de ella.

Me pareció que estaba funcionando bastante bien hasta que me di cuenta de que la vista de texto no responde a un click derecho. Otras operaciones (de edición, selección) parecen funcionar muy bien.

Además, si el primer nivel de respuesta se cambia a un hermano de la vista de desplazamiento (una vista de esquema, por ejemplo) la vista de texto no recupera el primer estado que responde a hacer clic en él. La selección va a cambiar en respuesta a clic, pero lo más destacado es la selección de color gris en lugar de azul (que indica que la vista de texto no es el primero en responder).

Si OFFSET el marco de la subvista superposición, la vista de texto se comporta 100% normalmente en la zona no solapada por la superposición, pero se comporta el área superpuesta incorrectamente, como se describe anteriormente.

Pasos para reproducir este comportamiento en Mac OS X 10.6.4:

  1. Crea un viejo y simple aplicación Cocoa no basado en el documento.
  2. Añadir un `IBOutlet NSTextView' a la aplicación .h delegado.
  3. Añadir un NSTextView a la ventana en MainMenu.xib. Conectar la salida Textview.
  4. Tipo en un trozo de código:

En applicationDidFinishLaunching:

NSView *overlay = [[NSView alloc] initWithFrame:textView.bounds];
[textView addSubview:overlay];
[overlay release];

Ejecutar la aplicación, observe que el botón derecho en el área de texto no funciona como debería, sin embargo, usted todavía puede interaccionar de otro modo con la vista de texto.

A continuación, añadir un NSOutlineView a la ventana en el XI ter. Observe que una vez hojas de enfoque del área de texto (si hace clic en la vista de esquema) con la superposición en su lugar, no se puede ajustar el enfoque posterior a la vista de texto (que no llegará a ser el primero en responder de nuevo).


¿Hay alguna manera de que pueda habilitar la NSTextView para recibir todos sus eventos, a pesar de que mi superposición NSView no acepta primeros eventos de respuesta o de ratón? Sospecho que esto podría estar relacionado con el editor de campo - tal vez está ignorando los eventos que considere están destinados a la vista de superposición

?
¿Fue útil?

Solución

Es probable que necesita para hacer su superposición de una instancia de una clase de vista personalizada que envía todos los eventos y mensajes de accesibilidad a la vista de texto. También puede ser necesario para convertir cualquier coordenada vista-en relación con el sistema de coordenadas de la vista de texto.

Otros consejos

No tengo mucha experiencia con él, pero otra posibilidad sería utilizar una capa de núcleo de animación como una superposición.

Una forma limpia de manejar esto es por lo que su punto de vista superposición de una subclase personalizada de NSView, y luego anular la hitTest: método para volver siempre nil . Esto evitará la vista de superposición de participar en la cadena de respuesta. En su lugar, los eventos son enviados automáticamente a ella de supervista o vistas más arriba en la jerarquía de vistas. También puede ser que desee anular acceptsFirstResponder para volver NO para estar seguro (en caso de que está establecido por accidente mediante programación).

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