2015-01-23 13 views
9

Nella mia app sto cercando di creare una cella personalizzato come il seguire:creare una cella personalizzato in un NSTableView

enter image description here

so come fare con iOS e credo che dovrebbe essere abbastanza lo stesso usando OS X. Quindi nel builder dell'interfaccia ho progettato la vista tabella ma posso capire come creare una cella personalizzata. Ho provato a inserire nel file .xib in cui ho progettato la tabella visualizzare il componente personalizzato di cui ho bisogno (2 NSTextField e 2 NSImageView), quindi creo una classe "CustomCell.m" e "CustomCell.h" come sottoclasse di NSTableCellView, quindi ho provato a connettere il mio componente a questo classe, ma non riesco ad aggiungerlo ... Perché non riesco a connettere il componente alla classe "CustomCell"? Cosa c'è che non va? Puoi aiutarmi a trovare un modo per farlo (forse anche un tutorial)?

Per fare questo ho solo seguito il metodo che ho subito a creare cellule tabella personalizzata per iOS

risposta

29
  1. Nello Xib, aggiungere un NSTableView e assicurarsi che contentType sia View Based nel riquadro Ispettore attributi.
  2. La colonna Tabella contiene un TableCellview, che contiene un TableViewCell per impostazione predefinita. Rimuovere il TableViewCell.
  3. Trascinare NSTextFields e ImageViews in TableCellview in base alle esigenze. Per impostazione predefinita, NSTableCellview supporta 1 Imageview e 1 Textfield. Se ne occorrono due, eredita NSTableCellview e crea le proprietà IBOutlet per i componenti e modifica la classe di NSTableCellview in IB in InheritedTableCellview.

    @interface InheritedTableCellview : NSTableCellView 
    
    @property (assign) IBOutlet NSTextField *secondTextField; 
    @property (assign) IBOutlet NSImageView *secondImageView; 
    
    @end 
    
    @implementation SRITableCellView 
    
    @end 
    
  4. Nome dell'identificatore di TableCellview con stringa univoca.

  5. Collegare i componenti di uscita di tipo Imageview e Textfield a TableCellview.
  6. Collegare l'origine dati tableview e delegare a viewController.

Nel controller della vista, implementare il metodo di origine dati sottostante per visualizzare il numero di righe richiesto.

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { 
    return self.tableArray.count; 
} 

Implementare il metodo delegato per impostare l'immagine e testo per ogni riga,

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

InheritedTableCellview *cellView = [tableView makeViewWithIdentifier:@"MainCell" owner:self]; 
cellView.backgroundStyle = NSBackgroundStyleDark; 
cellView.textField.stringValue = self.tableArray[row][@"textValue1"]; 
cellView.imageView.image = [NSImage imageNamed:self.tableArray[row][@"image1"]]; 
cellView.secondTextField.stringValue = self.tableArray[row][@"textValue2"]; 
cellView.secondImageView.image = [NSImage imageNamed:self.tableArray[row][@"image2"]]; 

return cellView; 

}

+1

Hai fatto un ottimo tutorial, grazie molto: ho risolto il mio problema utilizzando la tua risposta – lucgian841

+0

Grande aiuto. Grazie – Omkar

1

Apple scoraggia l'utilizzo di sottoclassi NSCell come da Lion. Ora puoi fare un NSTableView basato su NSView, che è molto più flessibile.

Li ho creati creando NSViews nei metodi dataSource ma here's un discreto tute per farlo con un pennino.

vedere apple docs anche.

Problemi correlati