Как я могу создать NSTextField с перерисовкой фокуса?

Я создал подклассы и определил свои собственные пользовательские классы NSFormatter и NSTextField, чтобы правильно отображать значения временного кода SMPTE (HH:MM:SS:FF). Когда пользователь выбирает использование пропуска кадров для значения fps, формат изменяется на HH:MM:SS;FF (точка с запятой в конце). У меня все это работает хорошо, за исключением одного последнего препятствия.

При изменении формата NSTextField с фокусом не обновляет свое отображение до тех пор, пока фокус не будет потерян. Вот скриншот для иллюстрации:

Изменение формата пропуска кадров

Я попытался отправить NSTextField сообщение setNeedsDisplay при изменении формата, а также отправить ему сообщение display. Кажется, пока ничего не работает, и текстовое поле с фокусом отказывается обновлять/перерисовывать себя, пока не потеряет фокус.

Любые предложения о том, что мне нужно сделать, чтобы это произошло?


person Chris    schedule 21.05.2013    source источник
comment
Я думал, что это может иметь какое-то отношение к этому. Я пытался в течение последних нескольких часов, и я все еще не могу заставить его работать. Я могу получить объект NSTextFieldCell, но оттуда я не могу получить доступ к редактору полей. Отправка fieldEditorForView: или fieldEditor:forObject: дает мне не отвечает на ошибку селектора. Кроме того, я пробовал drawWithFrame:inView: для NSTextFieldCell и не играл в кости. setNeedsDisplayInRect:avoidAdditionalLayout: выглядит многообещающе, но я не могу получить доступ к экземпляру NSTextView моего текстового поля.   -  person Chris    schedule 22.05.2013
comment
Будет ли привязка данных тем, что вам нужно? В этом случае вам нужно посмотреть это руководство по наблюдению за ключом и значением. По крайней мере, это даст вам правильные условия для поиска. developer.apple.com/library/ios/# документация/Какао/Концептуальные/   -  person timquinn    schedule 22.05.2013
comment
@Monolo Нет, я отправил его на мобильный. Я знаю, что это метод NSWindow, но он появился как возможное сообщение для сотового приемника, поэтому я попробовал. :)   -  person Chris    schedule 22.05.2013
comment
@ Крис, я вижу, ты нашел решение - тогда мы можем очистить все эти комментарии здесь :-)   -  person Monolo    schedule 22.05.2013


Ответы (1)


Мне удалось решить эту проблему сейчас. Это может быть немного хаком, но в основном то, что я в итоге сделал, это получить редактор полей NSTextField с currentEditor и отправить его как объект с опубликованным уведомлением об изменении формата.

Затем с помощью редактора полей мне нужно было replaceCharactersInRange:withString: изменить последнее ":" на ";" и наоборот. Хотя это может быть не оптимально, но работает отлично.

На самом деле, я разместил решение на github для всех, кому это может показаться полезным. https://github.com/cfloisand/smpteformatter

person Chris    schedule 22.05.2013
comment
куда отправить currentEditor как уведомление? - person imike; 23.08.2020