2009-04-18 8 views
15

저는 NSTextField가 있습니다. 버튼을 클릭하고 텍스트의 끝에이 텍스트 필드에 커서를 설정하면 내용을 설정하고 싶습니다. 누군가가 버튼을 클릭하여 입력하기 만하면됩니다.NSTextField에 초점을 맞 춥니 다.

지금까지는 [NSTextField selectText]를 사용하여이 텍스트 필드를 선택하지만 전체 텍스트를 선택하므로 누군가 입력하기 시작하면 텍스트 필드에있는 모든 텍스트가 손실됩니다.

답변

19

좋아, 내가 :) 지금

- (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 
6

당신은 이런 식으로 뭔가를 할 것입니다 :

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

이것은 또한 텍스트를 선택합니다 : -/ – Jeena

2

I ingame plugini를 쓰고 있는데, 나는 비슷한 문제가있다 :

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

이 작업 :

+0

여기서 gotEvent를 호출합니까? – eonist

30

또는

[yourTextField becomeFirstResponder]; 
+0

그 문제는 이것이 모든 텍스트를 선택한다는 것입니다. 그리고 미리 채워진 텍스트를 입력하기 시작하면 덮어 쓰게됩니다. 텍스트 뒤에 커서를 놓고 싶습니다. – Jeena

+12

이 메소드는 10.5에서 더 이상 사용되지 않습니다.이 메소드에 대한 문서를 읽으면 '이 메소드를 직접 호출하지 마십시오.'라는 말이 명확하게 나와 있습니다. –

+2

좋은 점, Alan, 10.8 SDK를 사용하여 becomeFirstResponder를 직접 사용하여 예외를 발생시키는 호출을 제거했습니다. –

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 

이 방법을 사용하면 원하는 위치에 텍스트 선택을 배치하고 그 직후에 타이핑을 시작할 수 있습니다.

관련 문제