Reputation: 2222
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
Reputation: 5992
You'll want to do something like this:
[[self window] makeFirstResponder:[self yourTextField]];
Upvotes: 11
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
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
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