сфокусировать NSTextField - PullRequest
       12

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

16 голосов
/ 19 апреля 2009

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

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

Ответы [ 5 ]

33 голосов
/ 06 января 2011

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

[yourTextField becomeFirstResponder];
20 голосов
/ 19 апреля 2009

Хорошо, я узнал это сейчас:)

- (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
8 голосов
/ 19 апреля 2009

Вы захотите сделать что-то вроде этого:

[[self window] makeFirstResponder:[self yourTextField]];
3 голосов
/ 16 мая 2010

Я пишу игровые плагины, у меня была похожая проблема:

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

это делает работу:)

2 голосов
/ 05 сентября 2013

Некоторое время назад я выполнил похожую задачу. Мое решение было записать метод небольшой категории для частичного выделения текста для 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

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

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