2011-11-20 20 views
6

मैं सरल WYSIWYG संपादन के लिए एक साधारण NSTextView- आधारित विंडो बनाने की कोशिश कर रहा हूं। हालांकि, मैं केवल कुछ प्रकार के स्वरूपण (उदाहरण के लिए बोल्ड, इटालिक, अंडरलाइन और एक सिंगल हेडिंग प्रकार, लेकिन कोई रंग या अलग-अलग फ़ॉन्ट्स) की अनुमति देना चाहता हूं।असमर्थित स्वरूपण को हटाने के लिए आप NSTextView में पेस्ट करने में कैसे रोक सकते हैं?

समस्या यह है कि अगर मैं बस NSTextView का उपयोग करता हूं, तो कोई फ़ॉर्मेटेड बना या कॉपी कर सकता है किसी अन्य प्रोग्राम में टेक्स्ट, फिर उसे उस दृश्य में पेस्ट करें और यह स्वरूपण इसके साथ चला जाता है, जिससे मैं अलग-अलग फ़ॉन्ट्स, रंग इत्यादि जैसी अनुमति नहीं देता हूं।

सबसे अच्छा, मैं स्वचालित रूप से बाहर निकलना चाहता हूं कोई प्रारूपण जो मेरा एप्लिकेशन समर्थन नहीं करता है। सबसे बुरी स्थिति में, मैं बस पेस्ट को रोकना चाहता हूं और इसे सादे-पाठ में बदलना चाहता हूं, हालांकि उन्हें मैन्युअल रूप से फिर से प्रारूपित करना होगा। लेकिन यह अमान्य स्वरूपण के लिए बेहतर है।

नोट: एसओ कई बार यहां कुछ समान पूछा गया है, लेकिन वे आमतौर पर वेब का संदर्भ ले रहे हैं या जावास्क्रिप्ट/JQuery का उपयोग कर रहे हैं। मैं विशेष रूप से मैक ऐप में NSTextView का उपयोग करने का जिक्र कर रहा हूं, इसलिए कृपया इसे डुप्लिकेट के रूप में चिह्नित करने से पहले, सुनिश्चित करें कि दूसरा प्रश्न क्या है। धन्यवाद।

उत्तर

1

अपने NSTextView उपवर्ग में:

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

[संपादित करें: देखने यहोशू Nozzi की टिप्पणी]

एक संभव समाधान अपने NSTextView इस टेम्पलेट विधि को लागू करने के लिए होगा:

- (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 
} 

इस तरह से आप किसी भी संभाल करने की जरूरत नहीं है वास्तविक प्रविष्टि/चिपकने का वास्तविक चिपकने से पहले पेस्टबोर्ड के साथ गड़बड़ कर सकते हैं।

तुम भी पेस्टबोर्ड के साथ काम कर NSTextView के इन तरीकों में देखना चाहते हो सकता है:

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

मैं वास्तविक पेस्टबोर्ड सामग्री के साथ खिलवाड़ से बचने चाहते हैं। उपयोगकर्ता ने स्वरूपित पाठ की प्रतिलिपि बनाई है, इसलिए आपको इसे उनके लिए नष्ट नहीं करना चाहिए। इस उत्तर के नीचे उल्लिखित अन्य विधियों का उपयोग करें (-readSelectionFromPasteboard: या -readSelectionFromPasteboard: प्रकार:)। –