2011-08-18 36 views
11

Tôi là NSOpenPanel để chọn tệp hoặc thư mục từ máy của người dùng. Nhưng khi người dùng nhấp vào "mở" con trỏ ở đầu đường dẫn hiển thị trong trường văn bản. Đây là một vấn đề bởi vì cho đến khi bạn nhấp vào trường văn bản và mũi tên bên phải, bạn sẽ không thấy rằng toàn bộ đường dẫn được liệt kê. Ví dụ, nếu con đường là:Làm cách nào để buộc con trỏ đến cuối NSTextField?

/Users/jeremysmith/code/testfolder/testfolder2 

Nó chỉ có thể hiển thị:

/Users/jeremysmith/code/ 

kể từ khi con trỏ là ngay từ đầu và chiều rộng của trường text chỉ đi vào "mã".

Trả lời

3

Hai ý tưởng nảy sinh trong đầu. Trước tiên, bạn có thể sử dụng -[NSTextView setSelectedRange:]:

NSTextView * fieldEditor = [thePanel fieldEditor:NO forObject:theTextField]; 

NSUInteger text_len = [[fieldEditor string] length]; 

[fieldEditor setSelectedRange:(NSRange){text_len, 0}]; 

Hoặc bạn có thể sử dụng một trong những phương pháp NSResponder hành động trên các lĩnh vực văn bản, như moveDown:, moveToEndOfLine:, moveToEndOfParagraph:, & c. Đánh dấu phím "Page Down" hoặc "Down Arrow" với [theTextField keyDown:...] cũng có thể hoạt động.

20

tôi đã làm việc này trên textfields bằng cách thực hiện:

[[self.inputFileTextField currentEditor] moveToEndOfLine:nil]; 
+1

Nếu trường văn bản là ban đầu không Editable tôi đã phải gửi '[self.inputFileTextField selectText: self]' để làm cho mã trên hoạt động. –

+1

@RotsiserMho Tôi có một trường văn bản không thể chỉnh sửa được và tôi đã thử đề xuất của bạn nhưng nó vẫn không hoạt động. Bạn đã gọi selectText trước hoặc sau khi bạn gọi moveToEndOfLine? – rocky

4

Trong Swift, vì nó năm 2015:

self.textField.moveToEndOfDocument(nil) 
+0

Không chắc chắn làm thế nào điều này là có thể, nhưng tôi nhận được một tai nạn không hợp lệ chọn khi gọi moveToEndOfDocument: trên lớp con NSTextField của tôi, mặc dù phương pháp đó là một phần mở rộng trên NSResponder mà một NSTextField là ... –

+0

@BenBaron là bạn tích cực bạn có những gì bạn nghĩ rằng bạn có thời gian chạy? –

+0

Vâng ngoại lệ đã xác nhận đối tượng là lớp con tùy chỉnh của tôi của NSTextField, vì vậy nó phải có tác dụng. Tôi đã kết thúc bằng cách sử dụng câu trả lời của simon.d trên cùng một lĩnh vực văn bản và nó làm việc tốt, vì vậy nó chắc chắn là một lĩnh vực văn bản vì nó đã có thể nhận được trình soạn thảo trường. –

2

Đây là giải pháp Swift của tôi:

self.fileTextField.currentEditor()?.moveToEndOfDocument(nil) 
Các vấn đề liên quan