2010-04-14 30 views
5

Tôi muốn chọn Văn bản trên UITextView, tương tự như tùy chọn bật "Chọn" và "Chọn tất cả" mặc định mà chúng tôi thấy khi chúng tôi nhấn. Tôi muốn người dùng có khả năng thực hiện điều đó từ trình đơn tùy chỉnh của tôi. Tôi đã chơi với selectedRange nhưng điều đó dường như không làm được điều này. Bất kỳ ý tưởng?Tôi có thể lập trình Chọn văn bản trong UITextView không?

Cảm ơn

+0

Bạn có thể đăng mã nơi bạn đã cố gắng sử dụng' selectedRange' không? Điều đó nghe giống như cách tiếp cận đúng; có thể bạn đang cho nó một phạm vi không hợp lệ hoặc một cái gì đó. –

+0

Tôi đang gặp vấn đề tương tự. Tôi có thể nhận được phạm vi chính xác cho văn bản tôi muốn chọn (UITextView cuộn đến đúng vị trí) nhưng không có "đánh dấu" của văn bản trong phạm vi cũng như điểm chèn. Tôi tự hỏi nếu tôi cần phải gửi một tin nhắn đến UITextView để "kích hoạt" hoặc một cái gì đó đầu tiên? – jasongullickson

Trả lời

5

Thuộc tính selectedRange nên làm điều đó nhưng, như đã đề cập trong documentation, chỉ trong iPhone OS 3.0 và sau này. Trong 2.2 và trước đó, thuộc tính selectedRange thực sự là một điểm chèn.

+1

Lưu ý rằng hàm để tạo một 'NSRange' là' NSMakeRange() 'không phải' NSRangeMake() 'như bạn có thể mong đợi. – devios1

4

Như đã đề cập trong câu trả lời được chấp nhận, thuộc tính selectedRange là điều bạn cần, nhưng hãy cẩn thận nếu bạn đang sử dụng phương thức ủy nhiệm -textViewDidBeginEditing:, bạn có thể cần trì hoãn một vòng lặp chạy để giành chiến thắng "action:

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    // Look for the default message and highlight it if present 
    NSRange defaultMsgRange = [textView.text rangeOfString:NSLocalizedString(@"TEXTFIELD_DEFAULT_MESSAGE", nil) options:NSAnchoredSearch]; 

    BOOL isDefaultMsg = !(defaultMsgRange.location == NSNotFound && defaultMsgRange.length == 0); 
    if (isDefaultMsg) { 

     // Need to delay this by one run loop otherwise the insertion wins 
     [self performBlock:^(id sender) { // (BlocksKit - use GCD otherwise) 

      textView.selectedRange = defaultMsgRange; 

     } afterDelay:0.0]; 
    } 
} 
Các vấn đề liên quan