Pregunta

Estoy utilizando un NSTokenField como una manera para que los usuarios introducir las etiquetas. Todo funciona bien y se engancha con CoreData gestión de las etiquetas, tanto cuando el usuario añade o elimina una etiqueta.

Hace poco añadió lógica para que el NSTokenField sería cambiar el tamaño vertical y cuando el usuario añade etiquetas y romper a la siguiente línea usando de Andrew Bowman IFVerticallyExpandingTextField . De nuevo, esto funciona todo bien.

El problema es que cuando tengo que llenar inicialmente la NSTokenField con las etiquetas, lo necesito para cambiar el tamaño. Me llenar el campo llamando a:

[tagField setObjectValue: anArray];

Donde unArray es una serie de objetos que representan una etiqueta o un token. Esto a su vez llama al método delegado NSTokenField

tokenField:displayStringForRepresentedObject:

Lo que devuelve la representación de cadena del objeto pasado en la matriz anterior.

Tengo que cambiar el tamaño de la NSTokenField después de todas las llamadas a displayStringForRepresentedObject. ¿Alguien tiene alguna idea de una notificación o una manera de saber que todo está hecho? Incluso una forma de llamar al cambio de tamaño entre cada llamada a displayStringForRepresentedObject probablemente funcionaría.

Gracias de antemano.

¿Fue útil?

Solución

Se podría intentar algo similar a -setNeedsDisplay: y -displayIfNeeded ... es decir, -setNeedsSizeToFit: y -sizeToFitIfNeeded.

Sólo necesitará un "needsSizeToFit" bandera BOOL y la -setNeedsSizeToFit: -sizeToFitIfNeeded y métodos.

Una vez configuradas las fichas, llamada -setNeedsSizeToFit: SÍ. Que a su vez establecer el indicador needsSizeToFit de la instancia, entonces, si la bandera es SÍ, se llamará [auto performSelector: @selector (sizeToFitIfNeeded) withObject: cero afterDelay: 0]. Su método -sizeToFitIfNeeded comprobará si su bandera needsSizeToFit es SÍ, llamada [auto sizeToFit], a continuación, establece el indicador needsSizeToFit a NO.

Actualizar

Aquí está un clase completa (JLNAutoSizingTokenField) que hace autosizing básicos descritos más arriba. El único aumento fue llamar a esto en el método delegado antes mencionado:

- (NSString *)tokenField:(NSTokenField *)aTokenField 
displayStringForRepresentedObject:(id)representedObject
{
    [(JLNAutoSizingTokenField *)aTokenField setNeedsSizeToFit:YES];
    return representedObject;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top