关注NSTextField

时间:2009-04-18 20:51:12

标签: objective-c cocoa

我有一个NSTextField,我想设置它的内容,如果我点击一个按钮,然后将光标设置在文本末尾的文本字段上,这样如果有人点击按钮,他就可以开始输入。

直到现在我使用[NSTextField selectText]它选择了这个文本字段,但是它选择了整个文本,所以如果有人刚开始输入,他就会丢失所有文本域中的文本。

5 个答案:

答案 0 :(得分:32)

答案 1 :(得分:20)

好的我现在发现了:))

- (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 :(得分:8)

你会想做这样的事情:

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

答案 3 :(得分:3)

我正在写一个游戏插件,我遇到了类似的问题:

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

这样做的工作:)

答案 4 :(得分:2)

前段时间我做过类似的任务。我的解决方案是写下NSTextField的部分文本选择的小类别方法。这个方法像原始的selectText:do一样工作(设置焦点来控制)。

@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

使用此方法,您可以将文本选择放在所需的位置,然后立即开始输入。