2012-01-25 28 views
7

Tôi đang tìm một kỹ thuật đáng tin cậy để thực hiện định dạng chuỗi đơn giản (đậm, nghiêng, ...) trong một NSTextView. Việc phân tích cú pháp văn bản gần như được thực hiện với regex, nhưng bây giờ tôi cần áp dụng đặc điểm phông chữ và cũng thay đổi kích thước.Kỹ thuật về cách định dạng/màu chuỗi của NSTextView

Một số đoạn mã trên như thế nào tôi thực hiện một chữ in đậm

[[textView textStorage] beginEditing]; 
[[textView textStorage] applyFontTraits:NSFontBoldTrait range:range]; 
[[textView textStorage] endEditing]; 

này và cũng có thể thay đổi kích thước với

[[textView textStorage] beginEditing]; 
NSFont* font = [[textView textStorage] attribute:NSFontAttributeName atIndex:range.location effectiveRange:nil]; 

NSFont* newFont = [NSFont fontWithName:[font familyName] 
            size:[font pointSize] + size]; 

[[textView textStorage] addAttribute:NSFontAttributeName 
           value:newFont 
           range:range]; 
[[textView textStorage] endEditing]; 

hoạt động tốt. Vấn đề duy nhất tôi có bây giờ là trong một số trường hợp, khi tôi nhập các ký tự mới, các ký tự đó được in đậm hoặc in nghiêng theo mặc định, mặc dù tôi không áp dụng các thuộc tính cho chúng.

Tôi có phải đặt lại nội dung nào đó bằng số setTypingAttributes của số NSTextView hoặc tôi chỉ cần bỏ lỡ điều gì đó ở đây?

+0

Tôi cần phải làm điều tương tự. Bạn có nhớ nói nơi bạn gọi mã định dạng không? Trong trường hợp của tôi, tôi có một chế độ xem văn bản sử dụng một ràng buộc, vì vậy nó có thể được sửa đổi hoặc thông qua chỉnh sửa hoặc thông qua một thay đổi được thực hiện bởi bộ điều khiển bên dưới. – paulmelnikow

Trả lời

2

Tôi nghĩ bạn đã đúng với cách tiếp cận để đặt typingAttributes. Reference for -setTypingAttributes: says

Tuy nhiên, nếu bạn thêm bất kỳ hành động nào của người dùng thay đổi thuộc tính văn bản, hành động sẽ sử dụng phương pháp này để áp dụng các thuộc tính đó sau đó. Hành động của người dùng thay đổi thuộc tính phải luôn đặt thuộc tính nhập vì có thể không có thay đổi tiếp theo trong lựa chọn trước lần nhập tiếp theo.

Điều đó dường như áp dụng trong trường hợp của bạn.

Tôi không biết liệu hành vi được mô tả chỉ đúng cho các trình chỉnh sửa WYSIWYG như TextEdit hay không. Bạn dường như làm việc trên một cái gì đó là tương tự như trong hành vi để một trình soạn thảo với cú pháp tô sáng. Ở đó bạn không bao giờ thực sự muốn thay đổi thuộc tính văn bản theo cách thủ công, mà đúng hơn là về cấu trúc từ ngữ pháp. Nó có thể không phù hợp trong trường hợp đó, và bạn nên thiết lập lại typingAttributes hoặc thiết lập nó theo phân tích cú pháp lên đến đó.

+0

Vì hiệu ứng không thể tái tạo ở bên cạnh tôi, tôi nghĩ việc đặt lại 'typingAttributes' là cách để thực hiện. Tôi sẽ quay lại câu trả lời này và đánh dấu nó là chính xác khi tôi có thể xác minh nó. – brutella

+0

Tôi chỉ thử nó và nó hoạt động cho tôi. Tôi sử dụng phương thức 'textViewDidChangeSelection:' từ 'NSTextViewDelegate' để móc vào và gọi' setTypingAttributes: '. Cho tôi biết nếu nó không hoạt động, sau đó tôi sẽ đăng dự án ví dụ ở đâu đó. – febeling

+0

Dưới đây là một ý chính với ví dụ: git: //gist.github.com/1816087.gif Loại kiểm tra, làm cho nó đậm bằng cách sử dụng nút, đặt con trỏ bên trong một phạm vi lạnh, loại, và nó là trọng lượng phông chữ đơn giản. – febeling

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