NSTokenField является подклассом NSTextField.Нет простого прямого способа напрямую управлять выбором этих классов (кроме -selectText :, который выбирает все).
Чтобы сделать это, когда он станет первым респондентом, вам нужно создать подкласс NSTokenField (не забудьте установить класс поля в вашей XIB равным классу вашего пользовательского подкласса) и переопределить -becomeFirstResponder следующим образом:
- (BOOL)becomeFirstResponder
{
if ([super becomeFirstResponder])
{
// If super became first responder, we can get the
// field editor and manipulate its selection directly
NSText * fieldEditor = [[self window] fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length], 0)];
return YES;
}
return NO;
}
Этот код сначала проверяет, отвечает ли super «да» (и становитсяпервый ответчик).Если это так, мы знаем, что у него будет редактор полей (экземпляр NSText), выбором которого мы можем напрямую манипулировать.Таким образом, мы получаем его редактор поля и устанавливаем его выбранный диапазон (я помещаю точку вставки в конец с диапазоном {lastchar, nolength}).
Чтобы сделать это, когда поле завершит редактирование (возврат, табуляцияи т. д.), переопределить -textDidEndEditing: вот так:
- (void)textDidEndEditing:(NSNotification *)aNotification
{
[super textDidEndEditing:aNotification];
NSText * fieldEditor = [[self window] fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length], 0)];
}
В этом случае, когда пользователь заканчивает редактирование, этот метод позволяет super делать свое дело, а затем проверяет, является ли он первым респондентом,Если это так, он делает то же, что и выше: помещает символ вставки в конец поля.
Обратите внимание, что это поведение не является стандартным и является неожиданным.Используйте экономно.