2012-10-08 29 views
6

मैं कस्टम एनएसटीबलसेलव्यू के साथ एक एनएसटीबलव्यू बनाना चाहता हूं।कस्टम एनएसटीबल व्यू?

  • सेल (देखें निब) के लिए एक निब फ़ाइल CustomCell.xib
  • CustomCell
  • बुलाया मेरे सेल के लिए एक कस्टम वर्ग कहा जाता है:

    यहाँ है कि मैं क्या अभी है और मेरे में कोड AppDelegate.m:

एच पहले मैं अपने तालिका दृश्य प्रोग्राम के रूप में बनाने के लिए: मैं झुका है अपने कस्टम सेल के लिए निब फ़ाइल में

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


    // In IB the tableColumn has the identifier set to the same string as the keys in our dictionary 
    NSString *identifier = [tableColumn identifier]; 

    if ([identifier isEqualToString:@"myCell"]) { 

     // We pass us as the owner so we can setup target/actions into this main controller object 
     CustomCell *cellView = [tableView makeViewWithIdentifier:identifier owner:self]; 
     // Then setup properties on the cellView based on the column 
     cellView.textField.stringValue = @"Name"; 
     return cellView; 
    } 
    return nil; 
} 

:

NSScrollView *tableContainer = [[NSScrollView alloc]initWithFrame:NSMakeRect(self.window.frame.size.width-TABLEWIDTH, 0, TABLEWIDTH, self.window.frame.size.height)]; 
    NSTableView *tableView = [[NSTableView alloc] initWithFrame:NSMakeRect(self.window.frame.size.width-TABLEWIDTH, 0, TABLEWIDTH, self.window.frame.size.height)]; 

    NSTableColumn *firstColumn = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease]; 
    [[firstColumn headerCell] setStringValue:@"First Column"]; 
    [tableView addTableColumn:firstColumn]; 

    tableView.dataSource = self; 
    tableView.delegate = self; 
    [tableContainer setDocumentView:tableView]; 
    tableContainer.autoresizingMask = NSViewHeightSizable | NSViewMinXMargin; 
    [self.window.contentView addSubview: tableContainer]; 

और यहाँ प्रतिनिधि विधि जहां मैं अपने कस्टम सेल कोड डाल करने के लिए चाहते हैं कस्टमकेल नामक मेरी कस्टम क्लास के साथ सेल व्यू को एनएसटीबलसेल व्यू उपclasses। मैंने अभी तक कोई और कदम नहीं उठाया है। तो मेरा CustomCell.m केवल डिफ़ॉल्ट प्रारंभिक कोड है। मैंने इसे छुआ नहीं है। और मैंने अपनी निब फ़ाइल में कुछ और नहीं किया, इसलिए मैंने फ़ाइल के स्वामी या ऐसा कुछ भी नहीं बदला क्योंकि मुझे वास्तव में नहीं पता कि क्या करना है। क्या कोई मदद कर सकता है? मैंने ऐप्पल दस्तावेज से नमूना फाइलों को देखा, लेकिन शोध के दिनों के बाद मुझे कोई समाधान नहीं मिला। यदि आप मेरी मदद कर सकते हैं तो मैं वास्तव में सराहना करता हूं।

+0

क्या आप यह स्पष्ट कर सकते हैं कि समस्या क्या है? मैंने आपकी पोस्ट को दो बार पढ़ा है और मैं नहीं समझ सकता कि आपके पास क्या समस्या है। – FluffulousChimp

+0

मेरे पास एक एनएसटीबल व्यू है और मैं कस्टम उपस्थिति वाले सेल चाहता हूं। इसलिए मैंने एक निब व्यू फ़ाइल स्थापित की है जहां मेरे पास यह NSTableCellView सेल है। अब, मैं nib फ़ाइल से उन विशेष कक्षों को प्रदर्शित करने के लिए प्रोग्रामेटिक रूप से अपना एनएसटीबल व्यू बनाना चाहता हूं। हालांकि उपरोक्त कोड वास्तव में मेरी तालिका में कुछ भी नहीं बदलता है। समझ में आता है ? –

+0

क्या आपने इसे हल किया? मैं एक ही मुद्दे पर ठोकर खाई है ... – Gossamer

उत्तर

3

यह मैं क्या कर समाप्त हो गया है:

बेशक

आप NSTableCellView उपवर्ग और इसे वापस की तरह मैं नीचे किया जाना है।

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{ 
    //this will be called first. It will tell the table how many cells your table view will have to display 
    return [arrayToDisplay count]; 

} 

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

    //this is called after the count of rows is set. It will populate your table according to the data your array to display contains 

    [tableView setTarget:self]; 
    [tableView setAction:@selector(click)]; 

    NSString *identifier = [tableColumn identifier]; 

    if ([identifier isEqualToString:@"TheCell"]) { 

     CustomCell *cellView = [tableView makeViewWithIdentifier:identifier owner:self]; 
     cellView.cellText.stringValue = [arrayToDisplay objectAtIndex:row]; 
     return cellView; 
    } 

    return nil; 
} 

और click विधि यह है कि जब एक पंक्ति इस प्रकार दिखाई देगा चयन किया जाता है शुरू हो रहा है:

-(void)click{ 

    int index = [table selectedRow]; 

    // Do something with your data 
    //e.g 
    [[arrayToDisplay objectAtIndex:index] findHiggsBoson]; 

} 

और कुछ आप आईओएस में मेज विचारों के साथ परिचित हैं, तो आप की तरह के तरीकों से परिचित होना चाहिए जिसे एनएसटीबल व्यू में जोड़ा जाना है:

NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"column"]; 
column.width = self.frame.size.width; 
[tableView addTableColumn:column]; 
1

आपको कस्टम NSTableViewCell उप-वर्गों के लिए NSTableView को उप-वर्ग करने की आवश्यकता नहीं है। तुम भी एक दृश्य के आधार पर तालिका दृश्य का उपयोग पर विचार हो सकता ...