Ответ от @Rob предположительно работал в какой-то момент, но, как заметил @Daniel, он больше не работает.Похоже, что Какао хочет отследить мышь и вытянуть выделение в ответ на щелчок, и попытка выделить текст в ответ на becomeFirstResponder
не очень хорошо с этим справляется.
Событию мыши нужнобыть перехвачен, чтобы предотвратить это отслеживание.Более или менее методом проб и ошибок я нашел решение, которое, похоже, работает на OS X 10.10:
@interface MyAutoselectTextField : NSTextField
@end
@implementation MyAutoselectTextField
- (void)mouseDown:(NSEvent *)theEvent
{
[[self currentEditor] selectAll:nil];
}
@end
Насколько я могу судить, к тому времени, когда mouseDown:
будет вызван редактором полейуже был настроен, вероятно, как побочный эффект becomeFirstResponder
.Вызов selectAll:
затем выбирает содержимое редактора полей.Вызов selectText:
на self
вместо этого не работает должным образом, предположительно, потому что установлен редактор полей.Обратите внимание, что переопределение mouseDown:
здесь не call super
;super
запускает цикл отслеживания, который вытягивает выделение, и мы не хотим такого поведения.Обратите внимание, что это mouseDown:
переопределение не влияет на выбор, когда текстовое поле стало первым респондентом, потому что в этот момент вызывается mouseDown:
редактора поля.
Я не знаю, какой диапазонВерсии OS X это работает через;если вам это нужно, вам нужно проверить это.К сожалению, работа с NSTextField
всегда немного хрупкая, потому что методы работы полевых редакторов очень странные и зависят от деталей реализации в super
.