Сфокусировать NSTextField
У меня есть NSTextField, и я хочу установить его содержимое, если я нахожусь на кнопке и устанавливаю курсор на это текстовое поле в конце текста, поэтому, если кто-то щелкнет кнопкой, которую он только может начать печатать.
До сих пор я использую [NSTextField selectText], который выбирает это текстовое поле, но выбирает весь текст, поэтому, если кто-то только начинает вводить текст, он потеряет весь текст, который находится в текстовом поле.
Ответы
Ответ 1
Хорошо, я это выяснил сейчас:)
- (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
Ответ 2
или даже проще
[yourTextField becomeFirstResponder];
Ответ 3
Вам нужно сделать что-то вроде этого:
[[self window] makeFirstResponder:[self yourTextField]];
Ответ 4
Я пишу плагин ingame, у меня была аналогичная проблема:
- (void)gotEvent:(NSEvent *)newEvent
{
[mainWindow makeKeyAndOrderFront:self];
[mainWindow makeFirstResponder:messageField];
[mainWindow sendEvent:newEvent]; // will forward the typing event
}
это выполняет задание:)
Ответ 5
Некоторое время назад я выполнял аналогичную задачу. Мое решение было написано методом небольшой категории для частичного выбора текста для 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
с помощью этого метода вы можете разместить выбор текста, где хотите, и начать вводить сразу после этого.