2015-04-24 6 views
5

मेरे पास एक एनएसटीबल व्यू है जिसमें मैं किसी विशेष कॉलम में टेक्स्ट का रंग बदल रहा हूं, लेकिन जब कोई पंक्ति चुना जाता है, तो पाठ अधिक उचित रंग में नहीं बदलता है कि यह पठनीय है।चयनित एनएसटीबल व्यू पंक्ति का टेक्स्ट रंग कैसे घुमाएं

खोजक की तिथि संशोधित, आकार, और प्रकार के कॉलम में ग्रे टेक्स्ट होता है, और जब आप फ़ाइल/फ़ोल्डर पंक्ति का चयन करते हैं, तो ग्रे टेक्स्ट सफेद में बदल जाता है (ताकि यह नीली हाइलाइट के भीतर पठनीय हो)।

मुझे डिफ़ॉल्ट रूप से इस व्यवहार को सक्षम करने के लिए एक्सकोड पर एक जादू चेकबॉक्स नहीं मिल रहा है, तो क्या कोई जानता है कि मैं एक ही प्रभाव कैसे प्राप्त कर सकता हूं?

मैं एक्सकोड 6.3 में स्विफ्ट का उपयोग कर रहा हूं।

धन्यवाद।

उत्तर

14

आप यह नहीं कहते कि आप अपने सेल के लिए उपयोग कर रहे पदानुक्रम को देखें या देखें। आप यह भी नहीं कहते कि आप टेक्स्ट फ़ील्ड के रंग या विशेष रूप से किस रंग को सेट कर रहे हैं।

जब कोई पंक्ति चुनी जाती है, तो पंक्ति स्वचालित रूप से interiorBackgroundStyle की गणना करती है। यह सेल दृश्य के backgroundStyle को भी सेट करता है यदि यह -setBackgroundStyle: का जवाब देता है या एक सेल के साथ NSControl है जो इसका जवाब देता है।

यदि आपका सेल व्यू NSTableCellView का उदाहरण है, तो यह पृष्ठभूमि शैली को अपने सभी सबव्यूव में आगे बढ़ाता है जो समान मानदंडों को पूरा करता है। यदि आप अपने सेल व्यू के रूप में एक अलग कंटेनर व्यू का उपयोग करते हैं और आप पृष्ठभूमि शैली को इस तरह से अग्रेषित करना चाहते हैं, तो आपको इसे अपने व्यू क्लास में लागू करना होगा।

एक NSTextField का सेल (NSTextFieldCell) -setBackgroundStyle: पर प्रतिक्रिया करता है और इसकी पृष्ठभूमि शैली स्वचालित रूप से उपरोक्त तंत्र द्वारा सेट की गई है। टेक्स्ट फ़ील्ड सेल स्वचालित रूप से अपने टेक्स्ट रंग को सफेद में बदल देगा यदि textColor मानक नियंत्रण रंगों में से एक है (उदा। NSColor.controlTextColor()), लेकिन यदि आप एक गैर मानक रंग असाइन करते हैं तो ऐसा नहीं करेंगे। इसलिए, यदि आप अपने पाठ के लिए एक विशिष्ट रंग सेट कर रहे हैं, तो पृष्ठभूमि शैली बदलते समय आप इसे बदलने के लिए ज़िम्मेदार हैं।

आप NSTableCellView के उप-वर्ग का उपयोग कर सकते हैं और backgroundStyle संपत्ति के लिए एक संपत्ति पर्यवेक्षक (didSet) जोड़ सकते हैं। यह सेट की गई शैली के आधार पर टेक्स्ट फ़ील्ड के textColor को बदल सकता है। उदाहरण के लिए, यदि आप पृष्ठभूमि शैली .Dark नहीं हैं या सामान्य टेक्स्ट फ़ील्ड रंग NSColor.controlTextColor() का उपयोग करते हैं तो यह आपके कस्टम रंग का उपयोग कर सकते हैं यदि यह .Dark है (ताकि टेक्स्ट फ़ील्ड वास्तव में इसे सफेद के रूप में प्रदर्शित करे)।

आप अपने टेक्स्ट फ़ील्ड के लिए NSTextFieldCell के उप-वर्ग का भी उपयोग कर सकते हैं और वही काम करते हैं। या पृष्ठभूमि शैली के आधार पर एक अलग पाठ रंग के साथ आकर्षित करने के लिए drawInteriorWithFrame(_:inView:) ओवरराइड करें।

+0

तालिका में देखें: viewForTableColumn: पंक्ति: प्रतिनिधि विधि मैं अपने दृश्य-आधारित सेल में टेक्स्ट फ़ील्ड का रंग सेट करने के लिए ऐसा कर रहा हूं: cell.textField! .textColor = NSColor.redcolor()। BlackColor() में सेट सेल बस ठीक है, लेकिन redcolor() नहीं है। आपके उत्तर में कुछ समय लगेगा, इसलिए मुझे कुछ विचार देने के लिए धन्यवाद। –

+0

दोस्त, मैं जांच करूंगा, लेकिन अगर यह काम करता है तो आप मेरे उद्धारकर्ता हैं !! UIKit से आने पर ऐपकिट बहुत अजीब है :) – Frizlab

+0

यह काम करता है! \ o/बहुत बढ़िया – Frizlab

4

केन की प्रतिक्रिया (उपरोक्त) की मदद से मैं इसे काम करने में सक्षम था। यहाँ एक किसी न किसी मसौदा करता है कि क्या मैं इसे करना चाहते हैं:

import Cocoa 

class CustomTextFieldCell: NSTextFieldCell { 

    // When the background changes (as a result of selection/deselection) switch appropriate colours 
    override var backgroundStyle: NSBackgroundStyle { 
     didSet { 
      if (backgroundStyle == NSBackgroundStyle.Dark) { 
       if self.textColor == NSColor.redColor() { 
        self.textColor = NSColor.yellowColor() 
       } 
      } else if (backgroundStyle == NSBackgroundStyle.Light) { 
       if (self.textColor == NSColor.yellowColor()) { 
        self.textColor = NSColor.redColor() 
       } 
      } 
     } 
    } 

    // When the colour changes, switch to a better alternative for the cell's current background 
    override var textColor: NSColor? { 
     didSet { 
      if let colour = self.textColor { 
       if backgroundStyle == NSBackgroundStyle.Dark { 
        if self.textColor == NSColor.redColor() { 
         self.textColor = NSColor.yellowColor() 
        } 
       } else if backgroundStyle == NSBackgroundStyle.Light { 
        if (self.textColor == NSColor.yellowColor()) { 
         self.textColor = NSColor.redColor() 
        } 
       } 
      } 
     } 
    } 

} 

अगर मैं पहचान निरीक्षक में मेरी तालिका दृश्य सेल के लिए कस्टम वर्ग के रूप में मेरी CustomTextFieldCell निर्धारित करते हैं, यह काम करता है। मुझे टेक्स्ट रंग के लिए एक संपत्ति पर्यवेक्षक भी जोड़ना होगा ताकि पंक्तियों को वर्तमान में हाइलाइट किया जा सके। मैं इसे अब बदल सकता हूं ताकि यह कठिन कोड न हो लेकिन यह अवधारणा को प्रदर्शित करता है।

धन्यवाद केन।

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