2013-07-27 30 views
7

Có cách nào để phát hiện khi người dùng thay đổi phạm vi của văn bản đã chọn trong chế độ xem văn bản (Trong một lớp con của UITextView) không? Tôi không thể tìm thấy bất kỳ NSNotification nào. Tôi đã cố gắng quan sát keyvalues ​​nhưng người quan sát cho phạm vi lựa chọn không nhận được gọiPhát hiện thay đổi lựa chọn trên UITextView?

[self addObserver:self forKeyPath:@"selectedRange" options:NSKeyValueObservingOptionNew context:nil]; 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    if ([keyPath isEqual:@"selectedRange"]) 
    { 
     // Do stuff 
    } 
} 

TÔI KHÔNG muốn sử dụng phương pháp đại biểu của UITextView

+0

Điều gì sai với đại biểu? –

+0

Bạn có muốn nhận thông báo khi văn bản thay đổi không? –

+0

@AbdullahShafique Tôi đang viết UITextView tùy chỉnh, nhưng sử dụng đại biểu bên trong chính UITextView, nó không còn có thể được sử dụng ở nơi khác (ví dụ: trong UIViewController) – aryaxt

Trả lời

9

UITextView thông qua giao thức UITextInput. Giao thức đó bao gồm thuộc tính đọc/ghi bắt buộc selectedTextRange. Đó là tài sản bạn muốn trả lời thay đổi.

Trong khi bạn có thể quan sát thuộc tính đó, cách tiếp cận đơn giản nhất là ghi đè phương thức -setSelectedTextRange: trong lớp con của bạn và thực hiện bất kỳ hành vi bổ sung nào bạn cần trong đó. (Bạn có thể hoặc có thể không muốn xác nhận rằng phạm vi thực sự đang thay đổi, tùy thuộc vào thiết kế cụ thể của bạn.)

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