Я реализовал NSTokenField, который использует некоторые пользовательские объекты данных для отображения динамических данных. Делегат настроен отлично и отображает правильные значения токена.Обновление NSTokenField после изменения содержимого программным путем
Я также внедрил меню на токенах, которое позволяет выбирать формат, используемый для отображения каждого токена. Моя проблема, однако, в том, что я не могу заставить NSTokenField немедленно ответить на эти изменения и перерисовать токен с новым выбранным форматом.
Если я нахожусь за пределами NSTokenField, поэтому он уходит в отставку с первого ответчика, он сразу же перерисовывает. Я также могу сделать это программно, явно устанавливая первый ответчик на nil. Единственная проблема заключается в том, что NSTokenField теряет фокус - и переназначает его, поскольку первый ответчик выбирает все в поле, чтобы пользователь мог случайно перезаписать весь контент.
Итак, мой вопрос заключается в том, есть ли способ просто вызвать NSTokenField для перерисовки содержимого без изменения фокусировки и выбора?
Спасибо, я передам ваши предложения выстрел позже сегодня. Полностью согласен с вашим Королевским PITA;) –
Просто проверил ваше решение и выяснилось, что [tokenField setRepresentedObject: nil]; имеет тот же побочный эффект, что и отключение и повторение ответа, а именно выбор всего поля токена. –
Обнаружено обходное решение на основе вашего решения: [tokenField setObjectValue: [NSArray arrayWithArray: [tokenField objectValue]]]; Кажется, что установка одних и тех же значений, но внутри нового массива вызывает перерисовку токена без побочного эффекта выбора. Это немного грязный хак, который Apple должен предоставить более чистое решение, но в любом случае я приму свой ответ, поскольку это приведет меня к приемлемому решению. –