2009-04-18 19 views
15

Tengo un NSTextField y quiero establecer su contenido si presiono un botón y luego de poner el cursor en este campo de texto al final del texto, de modo que si alguien presiona el botón podría comenzar a escribir.focus a NSTextField

Hasta ahora uso [NSTextField selectText] selecciona este campo de texto pero selecciona todo el texto, así que si alguien simplemente comienza a escribir, perdería todo el texto que ya está en el campo de texto.

Respuesta

19

Ok lo descubrí ahora :)

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

y en RubyCocoa es:

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

Usted querrá hacer algo como esto:

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

Esto también selecciona el texto: -/ – Jeena

2

I estoy escribiendo un plugini ingame, estaba teniendo un problema similar:

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

esto hace el trabajo :)

+0

¿de dónde se llama gotEvent from? – eonist

30

o incluso más fácil

[yourTextField becomeFirstResponder]; 
+0

El problema es que esto selecciona todo el texto y si comienza a escribir se sobrescribirá el texto rellenado previamente, quise poner el cursor detrás del texto. – Jeena

+12

Este método está obsoleto en 10.5; además, si lee la documentación de este método, indica claramente 'No invoque este método directamente'. –

+2

Un buen punto, Alan, acabo de eliminar un montón de llamadas que generaban una excepción para usar becomeFirstResponder directamente, usando el 10.8 SDK. –

2

Hace algún tiempo hice tarea similar. Mi solución fue escribir el método de categoría pequeña para la selección de texto parcial para NSTextField. Este método funciona como el original selectText: does (con setting focus to control).

@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 

con este método puede colocar la selección de texto donde desee y comenzar a escribir inmediatamente después de eso.