2012-03-19 24 views
15

Có cách nào để tôi nhận được vị trí hiện tại của UITextField thông qua đối tượng UITextRange của trường văn bản không? UITextRange có được trả về bởi UITextField ngay cả khi sử dụng không? Giao diện công khai cho UITextPosition không có bất kỳ thành viên hiển thị nào.UITextPosition trong UITextField

Trả lời

20

Tôi đã gặp phải vấn đề tương tự tối qua. Nó chỉ ra bạn phải sử dụng offsetFromPosition trên UITextField để có được vị trí tương đối của "bắt đầu" của phạm vi được lựa chọn để làm việc ra vị trí.

ví dụ:

// Get the selected text range 
UITextRange *selectedRange = [self selectedTextRange]; 

//Calculate the existing position, relative to the beginning of the field 
int pos = [self offsetFromPosition:self.beginningOfDocument 
         toPosition:selectedRange.start]; 

tôi đã kết thúc bằng cách sử dụng endOfDocument như nó đã được dễ dàng hơn để khôi phục lại vị trí của người dùng sau khi thay đổi lĩnh vực văn bản. Tôi đã viết một bài viết trên blog rằng ở đây:

http://neofight.wordpress.com/2012/04/01/finding-the-cursor-position-in-a-uitextfield/

+1

liên kết trỏ đến trang web phần mềm độc hại đáng ngờ. Hãy kiểm tra xem nó ra –

12

tôi đã sử dụng một loại trên UITextField và thực hiện setSelectedRange và selectedRange (giống như các phương pháp thực hiện trong lớp uitextview). Một ví dụ được tìm thấy trên B2Cloud here, với mã của chúng bên dưới:

@interface UITextField (Selection) 
- (NSRange) selectedRange; 
- (void) setSelectedRange:(NSRange) range; 
@end 

@implementation UITextField (Selection) 
- (NSRange) selectedRange 
{ 
    UITextPosition* beginning = self.beginningOfDocument; 

    UITextRange* selectedRange = self.selectedTextRange; 
    UITextPosition* selectionStart = selectedRange.start; 
    UITextPosition* selectionEnd = selectedRange.end; 

    const NSInteger location = [self offsetFromPosition:beginning toPosition:selectionStart]; 
    const NSInteger length = [self offsetFromPosition:selectionStart toPosition:selectionEnd]; 

    return NSMakeRange(location, length); 
} 

- (void) setSelectedRange:(NSRange) range 
{ 
    UITextPosition* beginning = self.beginningOfDocument; 

    UITextPosition* startPosition = [self positionFromPosition:beginning offset:range.location]; 
    UITextPosition* endPosition = [self positionFromPosition:beginning offset:range.location + range.length]; 
    UITextRange* selectionRange = [self textRangeFromPosition:startPosition toPosition:endPosition]; 

    [self setSelectedTextRange:selectionRange]; 
    } 

@end 
+0

Cảm ơn bạn. Mã của bạn đã giúp tôi tìm ra cách tôi có thể sử dụng 'UITextPosition' với' UITextView'. – derpoliuk