2012-06-06 8 views
18

में रंग पंक्तियां मेरे पास एक दृश्य आधारित nstableview है। मैं कुछ condtion जिसके लिए मैं नीचेव्यू आधारित एनएसटीबल्यूव्यू

- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row 
{ 
    NSTableRowView *view = [[NSTableRowView alloc] initWithFrame:NSMakeRect(1, 1, 100, 50)]; 

    [view setBackgroundColor:[NSColor redColor]]; 
    return view;; 
} 

प्रतिनिधि विधि कहा जाता है कोड का इस्तेमाल किया है के आधार पर संपूर्ण पंक्ति रंग करने के लिए चाहते हैं, लेकिन तालिका NSTableRowView प्रतिनिधि विधि द्वारा वापस का उपयोग किया प्रतीत नहीं होता है।

मुख्य उद्देश्य यहां कुछ शर्त के आधार पर पूरी पंक्ति रंग रहा है। उपरोक्त कार्यान्वयन में क्या गलत है?

+0

पृष्ठभूमि रंग सेट करने के लिए, आप का उपयोग करने के 'की जरूरत है - (शून्य) tableView: अपने NSTableViewDelegate.' में (NSInteger) पंक्ति के नीचे मेरी और अधिक विस्तृत जवाब देखें: (NSTableView *) tableView didAddRowView: (NSTableRowView *) rowView forRow। – DPlusV

उत्तर

0

यदि आप डब्ल्यूडब्ल्यूडीसी 2011 से दृश्य आधारित टेबलव्यू पर प्रस्तुति देखते हैं, तो आप देखेंगे कि मुख्य विचार इंटरफेस बिल्डर में विचार बनाना है, और फिर उन्हें वहां से प्राप्त करना है। कुछ ऐसा:

[tableView makeViewWithIdentifier:@"GroupRow" owner:self]; 

एक बार जब आप दृश्य प्राप्त कर लेते हैं, तो बस इसकी गुण सेट करें और इसे वापस कर दें।

इस उदाहरण में ध्यान दें कि इसका अपना पहचानकर्ता है, इसलिए इसे सेट करना याद रखें, लेकिन आप स्वत: पहचानकर्ताओं का भी उपयोग कर सकते हैं।

मुझे नहीं पता कि डब्ल्यूडब्ल्यूडीसी का सीधा लिंक काम करेगा या नहीं, लेकिन मुख्य पृष्ठ यहां है: https://developer.apple.com/videos/wwdc/2011/ और यदि आप "व्यू आधारित एनएसटीबल व्यू बेसिक टू एडवांस्ड" की खोज करते हैं, तो आपको यह मिल जाएगा। यह देखने लायक है।

+0

मैं पंक्ति – sach

+0

हाँ पर डेटा को पॉप्युलेट करने के लिए बाइंडिंग का उपयोग करूँगा .. मैं दृश्य आधारित – sach

1

अंत में यह नीचे के रूप में

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 

{ 
     NSView *cellView = (NSView*) [tableView makeViewWithIdentifier:[tableColumn identifier] owner:[tableView delegate]]; 
     CALayer *viewLayer = [CALayer layer]; 
     [viewLayer setBackgroundColor:[[NSColor redcolor] CGColor]]; 
     [cellView setWantsLayer:YES]; 
     [cellView setLayer:viewLayer]; 
     return cellView; 
    } 

कृपया ध्यान दें .. यू जो आप https://gist.github.com/707921 या http://forrst.com/posts/CGColor_Additions_for_NSColor-1eW

+3

का उपयोग करना चाहता हूं यह दृष्टिकोण एक हैक है - यह अलग-अलग सेल दृश्यों को परत-होस्टिंग (जो हमेशा आप चाहते हैं), और यह पूरी पंक्ति की शैली को नहीं बदलता है। दस्तावेजीकृत दृष्टिकोण के लिए इस पृष्ठ पर मेरा उत्तर देखें। – DPlusV

36

किसी और ने इस हिट और एक कस्टम चाहता NSTableRowView के लिए में पा सकते हैं cgcolor को nscolor बदलने की आवश्यकता काम किया पृष्ठभूमि रंग, दो दृष्टिकोण हैं।

  1. आप कस्टम ड्राइंग की जरूरत नहीं है, बस rowView.backgroundColor- (void)tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row में अपने NSTableViewDelegate में निर्धारित किया है।

    उदाहरण:

    - (void)tableView:(NSTableView *)tableView 
        didAddRowView:(NSTableRowView *)rowView 
          forRow:(NSInteger)row { 
    
        rowView.backgroundColor = [NSColor redColor]; 
    
    } 
    
  2. आप कस्टम ड्राइंग की जरूरत है, तो वांछित drawRect के साथ अपने स्वयं NSTableRowView उपवर्ग पैदा करते हैं। फिर, को लागू NSTableViewDelegate में निम्नलिखित:

    उदाहरण:

    - (NSTableRowView *)tableView:(NSTableView *)tableView 
           rowViewForRow:(NSInteger)row { 
        static NSString* const kRowIdentifier = @"RowView"; 
        MyRowViewSubclass* rowView = [tableView makeViewWithIdentifier:kRowIdentifier owner:self]; 
        if (!rowView) { 
         // Size doesn't matter, the table will set it 
         rowView = [[[MyRowViewSubclass alloc] initWithFrame:NSZeroRect] autorelease]; 
    
         // This seemingly magical line enables your view to be found 
         // next time "makeViewWithIdentifier" is called. 
         rowView.identifier = kRowIdentifier; 
        } 
    
        // Can customize properties here. Note that customizing 
        // 'backgroundColor' isn't going to work at this point since the table 
        // will reset it later. Use 'didAddRow' to customize if desired. 
    
        return rowView; 
    } 
    
+0

क्या यह काम करता है यदि आप सेल आधारित टेबल व्यू का उपयोग कर रहे हैं? मैं इस धारणा के तहत हूं कि यह नहीं है, लेकिन मैं बस सत्यापित करना चाहता था। – Kyle

+1

आप मेरा समय सेवर हैं! RowViewForRow प्रतिनिधि का उपयोग करने के तरीके को साझा करने के लिए धन्यवाद। – Tommy

+2

धन्यवाद! यह पूरी तरह से काम किया। इससे पहले कि मैंने यह पाया कि मैं अपनी उप-पंक्तिबद्ध पंक्ति को जोड़ने के तरीके के बारे में थोड़ा उलझन में था, लेकिन यह चमत्कार करता है। –

0

मैं फिर से लिखा परत दृष्टिकोण। स्विफ्ट 3.2 में

func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { 

    let greenCell = self.tableview.make(withIdentifier: "green", owner: self) 
    let layer:CALayer = CALayer() 
    layer.backgroundColor = NSColor.green.cgColor 

    greenCell?.wantsLayer = true 
    greenCell?.layer = layer 

    return greenCell 

} 

अपने स्टोरीबोर्ड के अनुसार सेल के पहचानकर्ता को बदलने के लिए मत भूलना, और कोड पहचानकर्ता "हरी" में। और निश्चित रूप से, पृष्ठभूमि रंग अगर आप चाहते हैं।

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