2009-04-18 35 views
15

Tôi có NSTextField và tôi muốn đặt nội dung của nó nếu tôi nhấp vào nút và đặt con trỏ trên trường văn bản này ở cuối văn bản để nếu ai đó bấm nút mà anh ấy có thể bắt đầu nhập.tập trung vào một NSTextField

Cho đến bây giờ tôi sử dụng [NSTextField selectText] nó chọn trường văn bản này nhưng nó chọn toàn bộ văn bản để nếu ai đó bắt đầu nhập, anh ta sẽ mất tất cả văn bản đã đọc trong trường văn bản.

Trả lời

19

Ok tôi thấy nó ra ngay bây giờ :)

- (IBAction)focusInputField:(id)sender { 
    [textField selectText:self]; 
    [[textField currentEditor] setSelectedRange:NSMakeRange([[textField stringValue] length], 0)]; 
} 

và trong RubyCocoa nó là:

def select_input_field 
    @input.selectText self 
    range = OSX::NSRange.new(@input.stringValue.length, 0) 
    @input.currentEditor.setSelectedRange range 
end 
6

Bạn sẽ muốn làm một cái gì đó như thế này:

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

Điều này cũng chọn văn bản: -/ – Jeena

2

tôi đang viết một plugini ingame, tôi gặp sự cố tương tự:

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

này không được công việc :)

+0

nơi bạn gọi gotEvent từ đâu? – eonist

30

hoặc thậm chí dễ dàng hơn

[yourTextField becomeFirstResponder]; 
+0

Vấn đề với điều này là việc này sẽ chọn tất cả văn bản và nếu bạn bắt đầu nhập văn bản được chuẩn bị trước sẽ bị ghi đè, tôi muốn đặt con trỏ phía sau văn bản. – Jeena

+12

Phương pháp này không được chấp nhận ở 10.5, hơn nữa, nếu bạn đọc tài liệu cho phương pháp này, nó nêu rõ rằng 'Không bao giờ gọi trực tiếp phương thức này'. –

+2

Điểm tốt, Alan, tôi vừa xóa một loạt các cuộc gọi đã tăng ngoại lệ khi sử dụng trực tiếp trở thànhFirstResponder, sử dụng SDK 10.8. –

2

Một số thời gian trước đây tôi đã làm công việc tương tự. Giải pháp của tôi là viết ra phương thức phân loại nhỏ để chọn một phần văn bản cho NSTextField. Phương thức này thực hiện công việc như selectText gốc: (với thiết lập focus để điều khiển).

@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 

bằng phương pháp này bạn có thể đặt lựa chọn văn bản nơi bạn muốn và bắt đầu nhập ngay sau đó.

Các vấn đề liên quan