absterno
@absterno

Как реализовать многострочность (multi-line) в NSTokenField?

Я хочу реализовать multi-line NSTokenFiels. Т.е чтобы вводимые символы или token'ы, при достижении границы поля ввода, переносились на новую строку и высота NSTokenField растягивалась так чтобы все строки было видно, например:
4201355426764c8cac0ea89dde73742b.png

Я нашел в интернете способ реализовать многострочность с помошью метода делегата controlTextDidChange:

- (void)controlTextDidChange:(NSNotification *)obj {
        NSRect oldTokenFieldFrame = [formatTokenField frame];
        NSSize cellSize = [[formatTokenField cell] cellSizeForBounds:[formatTokenField bounds]];
        
        NSLog(@"%s cell width: %f cell height: %f", __func__, cellSize.width, cellSize.height);
        NSLog(@"%s frame width: %f frame height: %f", __func__, oldTokenFieldFrame.size.width, oldTokenFieldFrame.size.height);
        
        [formatTokenField setFrame:NSMakeRect(oldTokenFieldFrame.origin.x,
                                              oldTokenFieldFrame.origin.y + oldTokenFieldFrame.size.height - cellSize.height,
                                              oldTokenFieldFrame.size.width,
                                              cellSize.height)];
    }


Но к сожалению это решение работает не корректно. Когда символы переносятся на новую строку то высота NSTokenField увеличивается на высоту новой строки не сразу, а при каждом новом символе на треть пока не достигнет нормальной высоты строки:
d20593baa000404c88663fd9f0290cb7.pngd7623b5f8f624aadbfc31dfe00115ea0.pngeef599c96f5b4304bcc178dc6adaddaf.png

При переходе на каждую новую строку такое поведение повторяется.

Помогите пожалуйсто разобраться как правильно реализовать multi-line в NSTokenField (не могли бы вы привести примеры кода). Всем заранее спасибо.
  • Вопрос задан
  • 274 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 17:47
7000 руб./за проект
21 нояб. 2024, в 17:30
1500 руб./за проект
21 нояб. 2024, в 17:22
7000 руб./за проект