2012-10-20 23 views
14

मेरे पास 3 टेक्स्टफील्ड के साथ एक कस्टम NSTableCellView है, 1 जो साथ आया और 2 अन्य जिन्हें मैंने स्वयं बनाया है। यहां समस्या है:
enter image description hereकस्टम NSTableCellView लेबल चयनित होने पर टेक्स्ट रंग नहीं बदलते

टेक्स्टफील्ड का टेक्स्ट रंग तब भी रहता है जब मैं पंक्ति पर क्लिक करता हूं। मैंने गुगलिंग द्वारा पाया गया कोड लागू करने का प्रयास किया है लेकिन यह काम नहीं करता है। मेरा कस्टम NSTableCellView कोड है:

- (void)drawRect:(NSRect)dirtyRect{ 
    NSColor *color = [NSColor colorWithCalibratedRed:(26/255.0) green:(26/255.0) blue:(26/255.0) alpha:1.0]; 
    [self.textField setTextColor:color]; 

    color = [NSColor colorWithCalibratedRed:(102/255.0) green:(102/255.0) blue:(102/255.0) alpha:1.0]; 
    [_lbl1 setTextColor:color]; 
    [_lbl2 setTextColor:color]; 
} 

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle { 
    NSColor *color = (backgroundStyle == NSBackgroundStyleDark) ? [NSColor windowBackgroundColor] : [NSColor controlShadowColor]; 
    self.textField.textColor = color; 
    self.lbl1.textColor = color; 
    self.lbl2.textColor = color; 
    [super setBackgroundStyle:backgroundStyle]; 
} 

क्या मुझे लेबलों 'पाठ का रंग सफेद बनाने के लिए जब उपयोगकर्ता उन पर क्लिक करता कर सकते हैं?

+0

जहां पाठ फ़ील्ड है उनके अधिक, सभी कर रहे हैं लेबल सही है? – vishy

+0

हाँ, यह सही है। गलतफहमी से बचने के लिए प्रश्न को बदल दिया –

+0

बस 'सेलफोररो' का उपयोग करके 'किया गया चयन' में सेल प्राप्त करें और सेल में लेबल के रंग सेट करें .. – vishy

उत्तर

17

असल में, एनएसटीबल व्यूसेल पर सेटबैकग्राउंड स्टाइल ओवरराइड करने से कम से कम ओएस एक्स 10.8 पर मेरे लिए काम किया है। यह चयन घटनाओं और विंडो सक्रियण/निष्क्रियता पर अद्यतन किया जाता है।

यहाँ मेरी कस्टम सेल impl है - के रूप में तुच्छ के रूप में प्राप्त कर सकते हैं:

@implementation RuntimeInstanceCellView 

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle { 
    [super setBackgroundStyle:backgroundStyle]; 
    self.detailTextField.textColor = (backgroundStyle == NSBackgroundStyleLight ? [NSColor darkGrayColor] : [NSColor colorWithCalibratedWhite:0.85 alpha:1.0]); 
// self.detailTextField.textColor = (backgroundStyle == NSBackgroundStyleLight ? [NSColor blackColor] : [NSColor whiteColor]); 
} 

@end 
+0

आप 'सुपर' क्यों कहते हैं: सेटबैकग्राउंड स्टाइल '? –

+3

@ दांतेमेन: सबसे पहले, क्योंकि यह सही है (यानी डिफ़ॉल्ट) चीज तब तक करना है जब तक आपके पास कोई कारण न हो। दूसरा, यह डिफ़ॉल्ट टेक्स्ट फ़ील्ड का टेक्स्ट रंग सेट करता है, और शायद पृष्ठभूमि रंग भी सेट करता है। –

+0

यह स्विफ्ट 1.2 में इस प्रकार काम नहीं करता है: http://stackoverflow.com/questions/28718577/issue-with-conforming-to-objective-c-protocol-from-swift-nsobject-subclass –

-5

में अपने tableViewSelectionDidChange सेल

UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; //replace UITableViewCell with your customCell class name if it other 
//now as u got the instance of your cell u can modify the labels in it, like 
cell.lable1.textColor = [UIColor whiteColor]; 

यह आप के लिए काम करेंगे का उपयोग कर मिलता है।

जब आप इसके बाद फिर से अन्य सेल का चयन करते हैं तो आपको समस्या हो सकती है, उस समय पिछले सेल में अभी भी सफेद रंग के लेबल हो सकते हैं। यदि इससे आपको समस्याएं आती हैं तो आपके हेडर क्लास में NSIndexPath उदाहरण है जो पिछले चयनित इंडेक्सपैथ का प्रतिनिधित्व करता है, इसका उपयोग करके आप एक नया सेल चुनने के बाद डिफ़ॉल्ट रंगों पर वापस सेट कर सकते हैं।

+0

बीटीडब्ल्यू, 'didSelectRowForIndexPath' को 'tableViewSelectionDidChange' में बदलें। NSTableView के लिए 'didSelectRowForIndexPath' नहीं है। –

+0

ठीक है, धन्यवाद .. मैंने मैक ऐप्स विकसित करना शुरू नहीं किया है .. – vishy

+2

मजेदार कैसे यूआईकिट कोड के साथ एक जवाब सही के रूप में चिह्नित किया गया है हालांकि सवाल ओएस एक्स/ऐपकिट के बारे में था ... –

9

स्विफ्ट 2.0 प्रक्रिया में स्वीकार किए जाते हैं जवाब में विस्तार करते हुए, थोड़ी अलग है। एक didSet property observer जोड़ने के लिए अपने NSTableCellView उपवर्ग के backgroundStyle संपत्ति ओवरराइड: (? यह मजेदार नहीं है)

class CustomTableCellView: NSTableCellView { 

    @IBOutlet weak var detailTextField: NSTextField! 

    override var backgroundStyle: NSBackgroundStyle { 
     didSet { 
      if self.backgroundStyle == .Light { 
       self.detailTextField.textColor = NSColor.controlTextColor() 
      } else if self.backgroundStyle == .Dark { 
       self.detailTextField.textColor = NSColor.alternateSelectedControlTextColor() 
      } 
     } 
    } 

} 
+0

टैंक इतने मच्छ! – Mike97

0

और स्विफ्ट के लिए 3 & 4:

override var backgroundStyle: NSView.BackgroundStyle { 
    didSet { 
     if self.backgroundStyle == .light { 
      self.detailTextField.textColor = NSColor.controlTextColor 
     } else if self.backgroundStyle == .dark { 
      self.detailTextField.textColor = NSColor.alternateSelectedControlTextColor 
     } 
    } 
}