Pregunta

Estoy trabajando con un NSTextView y tienen un conjunto de delegado para su propiedad -textStorage. Tras la recepción de -textStorageDidProcessEditing: que necesito para aplicar atributos a partes del texto.

se están aplicando mis atributos, pero siempre se aplica al texto antes Me hizo la edición, a pesar de que estoy invocando métodos de NSLayoutManager no desde -will... pero did....

Es como si el controlador de distribución no sabe nada de la reciente inserción glifo / deleción en este momento de la ejecución, por lo que supongo NSTextView / NSTextStorage invoca el método delegado después notifica al controlador de distribución de actualización.

¿Hay alguna manera de forzar el controlador de distribución de actualización con efecto inmediato por lo que puedo conseguir que esto funcione?

Soy consciente del método de NSTextStorage -addAttribute:value:range: (s) y han estado utilizando los satisfactoriamente hasta este punto, pero me he pegado a un punto en que necesito ahora hacerlo a través del controlador de distribución lugar como parte de una refactorización / la optimización de ejercicio.

¿Fue útil?

Solución

He encontrado una solución a este problema. Si se registra como un delegado para -textStorageDidProcessEditing: de tanto NSTextStorage y notificaciones -didInvalidateLayout: de NSLayoutManager entonces usted puede efectivamente "cola" una operación del delegado de almacenamiento de texto, que sólo se ejecutará una vez que el delegado controlador de distribución recibe una notificación de que sea seguro hacerlo.

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