2009-04-18 2 views
15

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

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

ответ

19

Ok я нашел его сейчас :)

- (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 
6

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

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

Это также выбирает текст: -/ – Jeena

2

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

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

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

+0

где вы называете gotEvent? – eonist

30

или еще проще

[yourTextField becomeFirstResponder]; 
+0

Проблема в том, что это выбирает весь текст, и если вы начнете вводить предварительно заполненный текст, он будет перезаписан, я хотел бы установить курсор за текстом. – Jeena

+12

Этот метод устарел в 10.5, кроме того, если вы прочитали документацию для этого метода, он совершенно четко заявляет: «Никогда не вызывайте этот метод напрямую». –

+2

Хорошо, Алан, я только что удалил кучу звонков, которые поднимали исключение для непосредственного использования startFirstResponder, используя 10.8 SDK. –

2

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

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