2012-07-22 15 views
9

मैं एक दृश्य-आधारित तालिका दृश्य का उपयोग कर रहा हूं और यह नहीं चाहता कि यह चयनित होने पर सफेद टेक्स्ट रंग के साथ NSTextFields को आकर्षित करे। मैं एक कामकाजी समाधान खोजने में सक्षम नहीं था। तो किसी भी मदद की बहुत सराहना की है।दृश्य-आधारित एनएसटीबल व्यू में चयन में सफेद टेक्स्ट रंग को अक्षम कैसे करें?

enter image description here

मैं चाहता हूँ "चयन सफेद है" पाठ भी डिफ़ॉल्ट पाठ रंग में तैयार किया:

यहाँ मेरी समस्या है।

अब तक मैं पता लगा कि tableView:viewForTableColumn:item: में

  • स्थापना गुण वास्तव में मदद नहीं करता है
  • एक कस्टम रंग है, जो कुछ नियंत्रण डिफ़ॉल्ट रंग से अलग है के लिए NSTextField रंग स्थापना, ड्राइंग करने से रोकेगा सफेद लेकिन यह अभी भी फ़ॉन्ट शैली खो देता है (बोल्ड, इटालिक, आदि)।
  • NSTableViewselectionHighlightStyleNSTableViewSelectionHighlightStyleNone पर विशेषता यह चाल है लेकिन यह NSTableRowView को फिर से नहीं हटाएगी। इसके अलावा चुनिंदा शैली वह नहीं है जो मैं चाहता हूं। मैं पंक्ति का चयन करने के लिए पहला क्लिक करना चाहता हूं और टेक्स्ट फ़ील्ड को संपादित करने के लिए दूसरा क्लिक करना चाहता हूं। जब आप NSTableViewSelectionHighlightStyleNone का उपयोग करते हैं तो आपका पहला क्लिक टेक्स्ट फ़ील्ड को संपादित करना प्रारंभ करता है।
  • एनएसटीक्स्टफिल्ड सीमावर्ती होने पर टेक्स्ट रंग बदल नहीं जाता है। लेकिन मुझे बोर्डिंग टेक्स्ट फ़ील्ड नहीं चाहिए (जैसा कि स्क्रीनशॉट में दिखाया गया है। टेक्स्ट फ़ील्ड संपादन योग्य हैं)

मुझे पता नहीं लगा कि टेक्स्ट फ़ील्ड को सफेद रंग कैसे मिलता है। मैंने setTextColor: को ओवरराइड कर दिया है और महसूस किया है कि जब चयन बदल जाता है तो इसे कभी नहीं कहा जाता है। तो मुझे लगता है कि एक एनएसएट्रिब्यूटेड स्ट्रिंग को एनएसटीबल व्यू ड्राइंग/नियमित रूप से चुनने के अंदर कहीं भी बनाया गया है।

किसी भी मदद की बहुत सराहना की जाती है।

उत्तर

12

मुझे जवाब मिला। मुझे NSTableCellView उपclass करना था और setBackgroundStyle: ओवरराइड करना था। बस इतना ही!

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle { 
    [super setBackgroundStyle: NSBackgroundStyleLight]; 
} 
+0

ओह। धन्यवाद। मैं सिर्फ "अक्षम" सेटटर। तेजी से यह है: 'var पृष्ठभूमि ओवरराइड स्टाइल: NSBackgroundStyle {get {return.dark} set {}} ' – surfrider

-1

मैंने अपनी तालिका दृश्य में सेल रंग सेट किया है-tableView: willDisplayCell: forTableColumn: पंक्ति: विधि।

-(void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell 
    forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
    if(tableView==<table view id of interest>) 
     { 
     ... 
     [cell setTextColor:<colour appropriate for this cell>]; 
     ... 
     } 
    ... 
} 

यह फ़ॉन्ट आकार या स्टाइल को प्रभावित नहीं करता है।

+3

दृश्य-आधारित टेबल अलग काम कर रहे हैं। – cocoafan

+0

वे अलग-अलग कैसे काम कर रहे हैं? यदि आप 'NSTableView' या उप-वर्ग का उपयोग कर रहे हैं तो यदि आपका नियंत्रक ऑब्जेक्ट 'NSTableViewDelegate' प्रोटोकॉल को गोद लेता है तो यह उपर्युक्त संदेश चयनकर्ता प्राप्त करता है। जब मैं किसी दिए गए संदर्भ में अनुपयोगी होता हूं तो मैं तालिका में चुनिंदा ग्रे-आउट प्रविष्टियों के लिए बिल्कुल इस तकनीक का उपयोग करता हूं। मैं बस अपने नियंत्रक की 'जागृत FromNib:' विधि और बिंगो में '[tableViewId setDelegate: self] 'को कॉल करता हूं। –

+1

सेल-आधारित टेबल और दृश्य-आधारित टेबल अलग-अलग काम करते हैं। आप सेल-आधारित तालिका का उपयोग कर रहे हैं '-tableView: willDisplayCell: forTableColumn: पंक्ति:' यदि आप व्यू-आधारित टेबल का उपयोग कर रहे थे तो कभी भी कॉल नहीं किया जाएगा। अरे, मदद करने की कोशिश करने के लिए यद्यपि धन्यवाद। – cocoafan

0
अधिभावी NSTableCellView के backgroundStyle के बजाय

, मैं इसे और अधिक सुविधाजनक NSTableRowView में viewWillDraw() बजाय ओवरराइड करने के लिए मिल गया। यह वास्तव में वह तरीका है जो डिफ़ॉल्ट रूप से चयन के दौरान आपके सेल दृश्य की पृष्ठभूमि शैली को बदल देता है।

आप इस व्यवहार को निष्क्रिय होगा:

class TableViewDelegate: NSObject, NSTableViewDelegate { 
    func tableView(tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? { 
     return TableRowView(frame: NSRect.zero) 
    } 
} 

class TableRowView : NSTableRowView { 
    private override func viewWillDraw() { 
     // By do nothing we prevent the super method to be called. It would otherwise change the selected cell view's backgroundStyle property. 
    } 
} 
संबंधित मुद्दे