2013-04-23 27 views
5

Tôi có một số UITextView được phân tích cú pháp và các thuộc tính của nó được thay đổi khi một số ký tự nhất định được nhập. Văn bản không thay đổi, chỉ các thuộc tính mô tả định dạng của văn bản.Thay đổi thuộc tính trên UITextView mà không cần đặt lại thuộc tính Văn bản được phân bổ

Nếu tôi phân tích cú pháp mỗi mục ký tự, tôi chủ yếu lấy text, tạo chuỗi được phân bổ với định dạng phù hợp và đặt thuộc tính attributedText của chế độ xem văn bản thành chuỗi được phân bổ mới của tôi. Điều này hoàn toàn phá vỡ tự động sửa, phím tắt không gian kép và kiểm tra lỗi chính tả.

Nếu tôi phân tích cú pháp chỉ khi một số ký tự đặc biệt được nhập, điều này hoạt động tốt hơn một chút, nhưng tôi nhận được các lỗi lạ như từ thứ hai của mỗi câu được viết hoa.

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    if (text.length == 0) { 
     return YES; 
    } 
    unichar firstCharacterInText = [text characterAtIndex:0]; 
    if (/* special character */) { 
     [self processTextView]; 
    } 
} 

- (void) processTextView { 
    NSString *text = self.text; 

    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text]; 

    [attributedString addAttribute:NSFontAttributeName value:[UIFont fontWithName:kFontRegular size:12.0f] range:NSMakeRange(0, text.length)]; 
    [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor textColor] range:NSMakeRange(0, text.length)]; 
    // set other properties 
} 

Câu hỏi của tôi là: Có cách nào để thay đổi các thuộc tính văn bản của quan điểm văn bản của tôi mà không cần cài đặt lại tài sản attributedText của TextView và phá vỡ tất cả những tính năng tiện dụng của UITextView?

+0

Chỉ dành cho hậu thế: Tôi đã gặp vấn đề tương tự với tự động sửa lỗi khi tôi đã thiết lập attributedText trong textViewDidChange/shouldChange và sắp gửi một radar khi tôi nhận ra đây không thực sự là lỗi: behaivour này là do thực tế rằng chế độ xem văn bản hoàn toàn thay đổi nội dung của nó mỗi lần một ký tự mới được nhập, do đó, tự động sửa, phím tắt hai dấu cách, v.v. không có cơ hội hoạt động. Tôi không thấy một giải pháp cho điều này, ngoài việc khám phá CoreText. – ntesler

+0

Với iOS 7, bạn có thể sử dụng 'TextKit' để đạt được những gì bạn muốn. – fatuhoku

Trả lời

0

Tôi gặp vấn đề tương tự và hóa ra là thiết lập thuộc tínhText thuộc tính của UITextView đã kích hoạt textViewDidChange:. Vì vậy, hãy đặt thuộc tínhText từ bên trong phương thứcViewViewChidChange: đã tạo vòng lặp vô hạn.

Tôi đã sửa nhanh trong đó tôi sẽ ngay lập tức trở về từ phương thức textViewDidChange: mỗi khi tôi thực hiện cuộc gọi đến phương thức đó. Dường như nó hoạt động tốt, nhưng tôi vẫn cần kiểm tra thêm.

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