Курсор не обновляется в NSTextField, так как он автоматически изменяет размеры при изменении размера вмещающего NSWindow

У меня есть NSTextField, который автоматически изменяет размер. Его текст центрирован.

Когда я начинаю печатать в поле и затем изменяю размер окружающего NSWindow, курсор остается там, где он есть, а не перемещается в соответствующее место:

курсор находится слева, в то время как он должен быть расположен в конце текста

Я также сделал проект XCode, демонстрирующий эту проблему: https://www.dropbox.com/sh/cohhmslyl9ti43b/AAC6ULteopsQCMDsEArJU15Ta?dl=0

Кто-нибудь знает, что здесь происходит?

1 ответ

Решение

Интересный вопрос, я никогда не применял автоматическое расположение к текстовому полю, поэтому мне было любопытно.

Мое решение было прислушиваться к NSWindowDelegate метод, -windowDidResize, После этого я бы проверил, было ли текстовое поле первым респондентом. Если это так, я снова установил его в качестве первого респондента, который сбрасывает курсор в правильном месте.

Код:

   NSResponder *firstResponder = [[NSApp keyWindow] firstResponder];
   if ([firstResponder isKindOfClass:[NSText class]] && (NSTextField*)[(NSText *)firstResponder delegate] == self.centeredText) {
      [self.centeredText becomeFirstResponder];
   }

Я заново загрузил проект, чтобы вы тоже могли его посмотреть: https://www.dropbox.com/s/lhsspi5gasbwq8j/CursorDoesNotUpdate%202.zip?dl=0

Другие вопросы по тегам