2016-02-09 7 views
7

मेरा लक्ष्य एक ऐसा दृश्य बनाना है जो गोइल डॉक्स टेक्स्ट एडिटर के समान है, जहां टिप्पणियों के पीछे टिप्पणी को हाइलाइट किया गया है। Highlightएनएसटीएक्स्ट व्यू एनएसवी व्यू और एनएसएसक्रॉल व्यू

मेरे समाधान एक NSScrollView एक NSView (दस्तावेज़ दृश्य के रूप में सेट) से युक्त है कि स्क्रॉल है और शामिल दोनों पाठ, और अन्य NSView हाइलाइट हो जाएगा कि के NSTextView

इस काम के लिए, NSTextView आकार के रूप में है यदि यह सीधे NSScrollView से संबंधित है। हालांकि, मैं NSTextView को यह व्यवहार नहीं कर सकता।

कोड मैं लेआउट के लिए है:

LatinViewController: loadView()

... 
let latinView = LatinView() 
latinView.autoresizingMask = [.ViewWidthSizable] 
latinView.wantsLayer = true 
latinView.layer?.backgroundColor = Theme.greenColor().CGColor 
self.latinView = latinView 
scrollView.documentView = latinView 
... 

LatinView: init()

... 
let textView = LatinTextView() 
textView.translatesAutoresizingMaskIntoConstraints = false 
textView.string = "Long string..." 
self.addSubview(textView) 
self.textView = textView 

self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[text]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["text": textView])) 
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[text]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["text": textView])) 
... 

LatinTextView: init()

... 
self.minSize = NSMakeSize(0, 0) 
self.maxSize = NSMakeSize(0, CGFloat(FLT_MAX)) 
self.verticallyResizable = true 
self.horizontallyResizable = false 
self.textContainer?.heightTracksTextView = false 
... 

यह किया जा सकता है?

उत्तर

1

आपकी आवश्यकताओं से यह प्रतीत होता है कि आप आसानी से NSAttributedString और NSTextView का उपयोग करके कार्यक्षमता प्राप्त कर सकते हैं। निम्न नमूना कोड एक NSTextView है पहले से ही रिच टेक्स्ट संपादन कार्यक्षमता और प्रारूप मेमोरी के साथ आता एक NSAttributedString

import Cocoa 

@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 

    @IBOutlet weak var window: NSWindow! 
    @IBOutlet var textView:NSTextView! 


    func applicationDidFinishLaunching(aNotification: NSNotification) { 
     let singleAttribute1 = [ NSForegroundColorAttributeName: NSColor.purpleColor() , NSBackgroundColorAttributeName: NSColor.yellowColor() ] 

     let multipleAttributes = [ 
      NSForegroundColorAttributeName: NSColor.redColor(), 
      NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleDouble.rawValue ] 

     var string1 = NSAttributedString(string: "Hello World", attributes: singleAttribute1) 

     var string2 = NSAttributedString(string: " This is knowstack", attributes: multipleAttributes) 

     var finalString = NSMutableAttributedString(attributedString: string1) 
     finalString.appendAttributedString(string2) 

     self.textView.textStorage?.setAttributedString(finalString) 

    } 

    func applicationWillTerminate(aNotification: NSNotification) { 
     // Insert code here to tear down your application 
    } 


    @IBAction func getAttributedString(sender:AnyObject){ 
     var attributedString = self.textView.attributedString() 
     print(attributedString) 
    } 
} 

enter image description here

1

NSLayoutManager (जो NSTextView द्वारा किया जाता है, और NSAttributedString सामान्य रूप में) के माध्यम से प्राप्त किया जा सकता है स्रोत बदलने के बिना स्क्रीन पर प्रदर्शित करने से पहले पाठ को बदलने के लिए डिज़ाइन की गई एक विशेष सुविधा: अस्थायी विशेषताएं।

- (void)addTemporaryAttribute:(NSString *)attrName value:(id)value forCharacterRange:(NSRange)charRange 

वे वर्तनी जाँच के दौरान शब्द की हरी/लाल रेखांकित के रूप में उदाहरण के लिए प्रयोग की जाने वाली अपेक्षा की जाती है, या बस एक हिस्से को उजागर करने के लिए:

तरीकों उनके नाम में "TemporaryAttribute" होती हैं, के NSLayoutManager डॉक्स को फिर से देखें अस्थायी रूप से पाठ का। वे मूल जिम्मेदार टेक्स्ट स्रोत को संशोधित किए बिना केवल प्रदर्शन उद्देश्यों के लिए पाठ के भाग की उपस्थिति को संशोधित करने की अनुमति देते हैं।

+0

यह एक अच्छा समाधान की तरह दिखता है। एक और समाधान जिसे मैंने सोचा था, हाइलाइटिंग दिखाने के लिए 'NSTextView' पर मुख्य 'NSTextLayer' परत के नीचे' कैलियर 'उदाहरण जोड़ना था, लेकिन यह समाधान बेहतर दिखता है। तुम क्या सोचते हो? – jamespick

संबंधित मुद्दे