2009-10-23 32 views
8

Vì ngữ nghĩa của một số tệp đính kèm NSTextView nhất định trong ứng dụng của tôi, tôi muốn biết khi nào chúng được chèn hoặc xóa khỏi lưu trữ văn bản của tôi.Làm cách nào để biết khi nào thuộc tính tệp đính kèm đang được thêm vào NSTextView của tôi?

Lớp con của NSTextView triển khai phương thức shouldChangeTextInRange: replacementString:, cho phép tôi dễ dàng xem khi nào một tệp đính kèm sắp được thay thế (tôi có thể tìm kiếm lưu trữ văn bản ở phạm vi được chỉ định).

Vì chuỗi thay thế chỉ là một NSString chứ không phải là NSAttributedString, tôi không có cách nào nhìn thấy từ phương thức này cho dù tệp đính kèm có được chèn hay không. Các tài liệu thậm chí còn đi xa như vậy để nói rằng chuỗi có thể là nil nếu "chỉ thuộc tính" đang được chỉnh sửa.

Vì vậy, câu hỏi là, điểm ghi đè tốt nhất để xem khi nào một tệp đính kèm được chèn vào? Hoặc có lẽ hữu ích: điểm ghi đè tốt nhất để xem khi thuộc tính đang được sửa đổi là gì?

Cập nhật: Tôi đã nói ở trên Tôi không có cách nào để biết liệu tệp đính kèm có được chèn hay không. Nó chỉ ra với tôi rằng tôi có thể nói rằng "một" tập tin đính kèm là có liên quan, bởi vì chuỗi sẽ chứa ma thuật NSAttachmentCharacter. Nhưng tôi sẽ không có thông tin cụ thể về tệp đính kèm cho đến khi chỉnh sửa hoàn tất.

Trả lời

4

Tôi sẽ xem xét phương thức ủy nhiệm NSTextStorage -textStorageDidProcessEditing :, nên được gọi mỗi lần thay đổi được thực hiện cho lưu trữ văn bản cơ bản. Sau đó, bạn có thể sử dụng các phương thức -editedRange, -editedMask và -changeInLength để xác định phần nào của lưu trữ văn bản đã được thay đổi và tìm trong phạm vi đó cho mọi tệp đính kèm mà bạn có thể quan tâm.

+0

Cảm ơn, Brian. Nó không phải là lý tưởng như tôi hy vọng nhưng nó có vẻ như nó sẽ làm các trick. Thật đáng tiếc là họ không bao gồm các thuộc tính trong phương thức shouldChange…. – danielpunkass

+0

Theo như tôi có thể nói, '-textStorageWillProcessEditing:' cho phép thay đổi nhiều hơn đối với văn bản hơn '-textStorageDidProcessEditing:'. Thay vào đó, bạn có thể muốn sử dụng nó. –

2

Bạn có thể muốn có một cái nhìn tại hai NSTextStorage phương pháp đại biểu:

- (void)textStorageWillProcessEditing:(NSNotification *)notification; 
/* Delegate can change the characters or attributes */ 

- (void)textStorageDidProcessEditing:(NSNotification *)notification; 
/* Delegate can change the attributes */ 

Bên textStorageWill/DidProcessEditing, bạn có thể gọi -[NSTextStorage editedMask]-[NSTextStorage editedRange] để tìm hiểu những gì đã thay đổi và sau đó có hành động phù hợp.

+0

Xin chào Jonathan - cảm ơn vì đã bình luận. Tôi đã bình chọn câu trả lời của bạn nhưng quyết định chấp nhận Brian vì đó là những khoảnh khắc trước đó và bởi vì nó đã tích luỹ thêm một vài phiếu bầu. – danielpunkass

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