2014-02-28 6 views
5

In meiner TableView habe ich eine dataSource von NSMutableArray * currList - sie enthält Objekte des Objekts Agent. Ich habe ein angepasstes TableCell erstellt und alles richtig eingerichtet. Ich Problem bin zu finden, während die Daten anzeigt:iOS: Anpassen von TableViewCell - Initialisieren von benutzerdefinierten Zellen

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *simpleTableIdentifier = @"ChatListCell"; 

    // Custom TableViewCell 
    ChartListCell *cell = (ChartListCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    if (cell == nil) { 
      // I believe here I am going wrong 
      cell = [[ChartListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
      NSLog(@"Cell = %@", cell); // Shows null 
    } 
    /* 
    With UITableViewCell, things are working perfectly fine 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
    } 
    */ 
    Agent *agent = (Agent *)[currChatList objectAtIndex:indexPath.row]; 
    NSLog(@"Agent name - %@", agent.name); // Prints proper data 
    cell.nameLabel.text = agent.name; 
    cell.thumbImageView.image = [UIImage imageNamed:agent.photo]; 
    cell.timeLabel.text = agent.chatTime; 

    return cell; 
} 

Wie Sie oben Code Kommentare sehen in kann, wenn ich die benutzerdefinierte ChartListCell Kommentar und verwenden UITableViewCell, es funktioniert einwandfrei. Aber mit ChartListCell, nichts kommt auf und in Protokollen bekomme ich "Cell = null" & Agent Name wird ordnungsgemäß angezeigt. Zelle sollte nicht null sein. Warum ist es null, kann mir bitte jemand dabei helfen? Wo mache ich Fehler?

Jede Hilfe wird sehr geschätzt.

Dank

+1

Haben Sie Ihre benutzerdefinierte Zellenfeder oder Klasse mit der Tabellenansicht an anderer Stelle in Ihrem Code registriert? – Alex

+0

Zeigt die Zelle den Namen/das Foto des Agenten an, wenn Sie 'ChartListCell' verwenden? – RaffAl

+0

Wo haben Sie diese benutzerdefinierte Zelle erstellt? Storyboard? Xib? – rdelmar

Antwort

14

importieren Datei Ihrer benutzerdefinierten Zelle und versuchen, diese

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *simpleTableIdentifier = @"ChartListCell"; 

ChartListCell *cell = (ChartListCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
if (cell == nil) 
{ 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ChartListCell" owner:self options:nil]; 
    cell = [nib objectAtIndex:0]; 

}   

Agent *agent = (Agent *)[currChatList objectAtIndex:indexPath.row]; 
NSLog(@"Agent name - %@", agent.name); // Prints proper data 
cell.nameLabel.text = agent.name; 
cell.thumbImageView.image = [UIImage imageNamed:agent.photo]; 
cell.timeLabel.text = agent.chatTime; 

return cell; 
} 
+0

Danke. Ich dachte, dass NSArray * Feder die Linie war, wo ich Fehler machte, aber wusste nicht, was der Fehler war und warum NSArray * erforderlich ist. Aus deinem Code und deiner Frage - "ob es in Xib oder Storyboard erstellt wurde" kann ich sagen, dass diese Zeile die Zelle aus der XIB-Datei initiieren soll. Aber nicht bekommen, warum NSArray & 0. Element von NSArray ist das Objekt für die Zelle ??? Ich werde einige Zeit warten, um diesen Punkt zu kennen, wird Ihre Antwort als Antwort bald markieren. – Tvd

+2

mit dem 0th Element, da nur ein Element in der Array Nib enthalten ist. weil es nur eine Nib-Datei mit dem Namen ChartListCell gibt – Mohit

+1

Ok, jetzt habe ich das Konzept dieser Zeilen verstanden. Wir holen die XIB-Dateien aus dem Bündel mit spezifischem Namen und wählen dann die bestimmte Datei aus dem Array. Array wird alle Dateien mit dem angegebenen Namen haben. Da wir nur eine Datei mit diesem Namen haben, wählen wir das 0. Element aus dem Array. Danke vielmals. – Tvd

1

Grundsätzlich gibt es vier mögliche Ansätze für individuelle UITableViewCells machen: Wenn Sie daran interessiert sind diese vier zu lernen alle ist es wert Gehen Sie über diesen Link: http://www.apeth.com/iOSBook/ch21.html#_custom_cells, die alle diese Ansätze schön beschreibt.

Gehen Sie einfach durch Ihr Wissen.

Verwandte Themen