Jeena
Jeena

Reputation: 2222

focus a NSTextField

I have a NSTextField and I want to set its content if I klick on a button and than set the cursor on this textfield at the end of the text so if someone klicks the button he could just begin to type.

Until now I use [NSTextField selectText] it selects this textfield but it selects the whole text so if someone just begins to type he'd lose all the text which alread is in the textfield.

Upvotes: 22

Views: 30296

Answers (5)

joshwbrick
joshwbrick

Reputation: 5992

You'll want to do something like this:

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

Upvotes: 11

vasylz
vasylz

Reputation: 177

Some time ago I did similar task. My solution was write down small category method for partial text selection for NSTextField. This method does job like original selectText: does (with 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

with this method you may place text selection where you want and start typing right after that.

Upvotes: 2

ewcy
ewcy

Reputation: 405

or even easier

[yourTextField becomeFirstResponder];

Upvotes: 34

Antwan van Houdt
Antwan van Houdt

Reputation: 6991

I am writing an ingame plugini, I were having a similar problem:

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

this does the job :)

Upvotes: 3

Jeena
Jeena

Reputation: 2222

Ok I found it out now :)

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

and in RubyCocoa it is:

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

Upvotes: 22

Related Questions