Изменение размера NSTokenField после заполнения токенами - PullRequest
2 голосов
/ 17 сентября 2010

Я использую NSTokenField как способ ввода тегов пользователями.Все работает нормально, и CoreData подключается к управлению тегами, когда пользователь добавляет или удаляет тег.

Я недавно добавил логику, чтобы NSTokenField изменял размеры по вертикали, когда пользователь добавляет теги, и они переходят к следующему.линия, используя IFVerticallyExpandingTextField Эндрю Боумена.Опять же, все это прекрасно работает.

Проблема в том, что, когда мне нужно изначально заполнить NSTokenField тегами, мне нужно его изменить размер.Я заполняю поле, вызывая:

[tagField setObjectValue: anArray];

Где anArray - это серия объектов, представляющих тег или токен.Это, в свою очередь, вызывает метод делегата NSTokenField

tokenField:displayStringForRepresentedObject:

, который возвращает строковое представление для объекта, переданного в предыдущем массиве.

Мне нужно изменить размер NSTokenField после всех вызовов displayStringForRepresentedObject,У кого-нибудь есть идеи по уведомлению или способу узнать, что все это сделано?Даже способ вызова изменения размера между каждым вызовом displayStringForRepresentedObject, вероятно, будет работать.

Заранее спасибо.

1 Ответ

0 голосов
/ 17 сентября 2010

Вы можете попробовать что-то похожее на -setNeedsDisplay: и -displayIfNeeded ... т.е. -setNeedsSizeToFit: и -sizeToFitIfNeeded.

Вам просто понадобится флаг BOOL "needsSizeToFit" и методы -setNeedsSizeToFit: и -sizeToFitIfNeeded.

После того как вы установите свои токены, вызовите -setNeedsSizeToFit: YES.Он, в свою очередь, установит флаг needsSizeToFit экземпляра, затем, если этот флаг равен YES, он вызовет [self executeSelector: @selector (sizeToFitIfNeeded) withObject: nil afterDelay: 0].Ваш метод -sizeToFitIfNeeded будет проверять, имеет ли ваш флаг needsSizeToFit значение YES, вызвать [self sizeToFit], а затем установить для флага needsSizeToFit значение NO.

Обновить

Здесь полный класс (JLNAutoSizingTokenField) , который выполняет базовое автоматическое изменение размера, как описано выше.Единственным дополнением было вызвать это в вышеупомянутом методе делегата:

- (NSString *)tokenField:(NSTokenField *)aTokenField 
displayStringForRepresentedObject:(id)representedObject
{
    [(JLNAutoSizingTokenField *)aTokenField setNeedsSizeToFit:YES];
    return representedObject;
}
...