2011-11-20 22 views
6

Tôi đang cố gắng tạo một cửa sổ dựa trên NSTextView đơn giản để chỉnh sửa WYSIWYG đơn giản. Tuy nhiên, tôi chỉ muốn cho phép một số loại định dạng nhất định (ví dụ: In đậm, Nghiêng, Gạch chân và một loại tiêu đề đơn lẻ nhưng không có màu hoặc phông chữ khác.)Làm cách nào để bạn có thể chặn dán vào một NSTextView để xóa định dạng không được hỗ trợ?

Vấn đề là nếu tôi chỉ sử dụng NSTextView, ai đó có thể tạo hoặc sao chép định dạng văn bản trong một chương trình khác, sau đó chỉ cần dán vào chế độ xem đó và tất cả định dạng đó đi kèm với nó, cho phép những thứ tôi không cho phép, chẳng hạn như phông chữ, màu sắc khác nhau, v.v.

Tốt nhất, tôi muốn tự động thoát ra mọi định dạng mà ứng dụng của tôi không hỗ trợ. Tệ nhất, tôi chỉ đơn giản là ngăn chặn dán và thay đổi nó thành văn bản thuần mặc dù họ sẽ phải sau đó định dạng lại nó theo cách thủ công. Nhưng đó là thích hợp hơn để định dạng không hợp lệ.

Lưu ý: Tương tự như vậy đã được hỏi trên SO nhiều lần, nhưng chúng thường đề cập đến web hoặc sử dụng JavaScript/JQuery. Tôi đặc biệt đề cập đến việc sử dụng NSTextView trong ứng dụng Mac, vì vậy, trước khi chỉ cần đánh dấu mục này là trùng lặp, hãy đảm bảo đó là câu hỏi khác đề cập đến. Cảm ơn bạn.

Trả lời

1

Trong lớp con NSTextView của bạn:

override func paste(_ sender: Any?) { 
    pasteAsPlainText(sender) 
    } 
2

[Chỉnh sửa: thấy bình luận Joshua Nozzi của]

Một giải pháp khả thi sẽ được thực hiện NSTextView của bạn thực hiện mẫu phương pháp này:

- (void)paste:(id)sender { 
    NSPasteboard *pb = [NSPasteboard generalPasteboard]; 
    //receive formatted string from pasteboard 
    //remove formatting from string 
    //put back plaintext string into pasteboard 
    [super paste:sender]; 
    //put back initial formatted string 
} 

Bằng cách này bạn không cần phải xử lý bất kỳ của việc chèn/dán thực tế nhưng có thể gây rối với các tấm bảng trước khi dán thực tế.

Bạn cũng có thể muốn xem xét những phương pháp NSTextView đối phó với các tông:

  • preferredPasteboardTypeFromArray:restrictedToTypesFromArray:
  • readSelectionFromPasteboard:
  • readSelectionFromPasteboard:type:
  • readablePasteboardTypes
  • writablePasteboardTypes
  • writeSelectionToPasteboard:type:
  • writeSelectionToPasteboard:types:
  • validRequestorForSendType:returnType:
+6

Tôi muốn tránh can thiệp vào nội dung các tông thực tế. Người dùng đã sao chép văn bản đã định dạng, vì vậy bạn không nên hủy bỏ nó cho họ. Sử dụng các phương pháp khác được đề cập ở dưới cùng của câu trả lời này (-readSelectionFromPasteboard: or -readSelectionFromPasteboard: type:). –

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