我有一个NSTextField,我想设置它的内容,如果我点击一个按钮,然后将光标设置在文本末尾的文本字段上,这样如果有人点击按钮,他就可以开始输入。
直到现在我使用[NSTextField selectText]它选择了这个文本字段,但是它选择了整个文本,所以如果有人刚开始输入,他就会丢失所有文本域中的文本。
答案 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
使用此方法,您可以将文本选择放在所需的位置,然后立即开始输入。