Сфокусировать NSTextField

У меня есть NSTextField, и я хочу установить его содержимое, если я нахожусь на кнопке и устанавливаю курсор на это текстовое поле в конце текста, поэтому, если кто-то щелкнет кнопкой, которую он только может начать печатать.

До сих пор я использую [NSTextField selectText], который выбирает это текстовое поле, но выбирает весь текст, поэтому, если кто-то только начинает вводить текст, он потеряет весь текст, который находится в текстовом поле.

Ответы

Ответ 1

Хорошо, я это выяснил сейчас:)

- (IBAction)focusInputField:(id)sender {
    [textField selectText:self];
    [[textField currentEditor] setSelectedRange:NSMakeRange([[textField stringValue] length], 0)];  
}

и в RubyCocoa это:

def select_input_field
    @input.selectText self
    range = OSX::NSRange.new(@input.stringValue.length, 0)
    @input.currentEditor.setSelectedRange range
end

Ответ 2

или даже проще

[yourTextField becomeFirstResponder];

Ответ 3

Вам нужно сделать что-то вроде этого:

[[self window] makeFirstResponder:[self yourTextField]];

Ответ 4

Я пишу плагин ingame, у меня была аналогичная проблема:

- (void)gotEvent:(NSEvent *)newEvent
{
  [mainWindow makeKeyAndOrderFront:self];
  [mainWindow makeFirstResponder:messageField];
  [mainWindow sendEvent:newEvent]; // will forward the typing event
}

это выполняет задание:)

Ответ 5

Некоторое время назад я выполнял аналогичную задачу. Мое решение было написано методом небольшой категории для частичного выбора текста для NSTextField. Этот метод выполняет работу как оригинальный selectText: делает (с настройкой фокуса на управление).

@implementation NSTextField( SelExt )

-(void)selectTextRange:(NSRange)range
{
   NSText *textEditor = [self.window fieldEditor:YES forObject:self];
   if( textEditor ){
      id cell = [self selectedCell];
      [cell selectWithFrame:[self bounds] inView:self 
            editor:textEditor delegate:self
            start:range.location length:range.length];
   }
}

@end

с помощью этого метода вы можете разместить выбор текста, где хотите, и начать вводить сразу после этого.