Cambiar el tamaño de NSTokenField después de poblar con fichas
-
03-10-2019 - |
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.
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;
}