Проблема, с которой я столкнулся в описанных выше решениях, заключается в том, что когда я вносил изменения в текстовое поле в пользовательском интерфейсе, курсор перемещался в конец строки. Так что, если бы у меня была строка в текстовом поле, как это
[VCOUVER]
Я бы поставил курсор на 1:
[V | COUVER]
и введите строчную букву 'a', это произойдет:
[VACOUVER | ]
не замечая этого, я набрал бы 'n' и получил бы:
[VACOUVERN | ]
Дерьмо ... Хорошо, вот мое исправление:
-(void)controlTextDidChange:(NSNotification *)obj {
if([obj.object isEqualTo:self.locationTextField]) {
NSText *fieldEditor = [[obj userInfo] objectForKey:@"NSFieldEditor"];
NSRange rng = [fieldEditor selectedRange];
[fieldEditor setString:[[fieldEditor string] uppercaseString]];
[fieldEditor setSelectedRange:rng];
}
}
То есть перед применением верхнего регистра захватите положение курсора, примените верхний регистр, а затем верните курсор назад.