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];
}
}
Nguồn
2013-09-28 09:47:22
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ì đó. –
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