2009-09-10 10 views
52

in meinem UITableView Ich möchte für die ersten Nachrichten von einem RSS-Feed eine benutzerdefinierte TabelleViewCell (Typ A lässt sagen) und für die anderen Nachrichten zweite, dritte etc .. eine andere benutzerdefinierte TabelleViewCell (trype B) Das Problem ist, dass die benutzerdefinierte TabelleViewCell (trype A) für die ersten Nachrichten neu verwendet wird, aber seltsamerweise die Anzahl der Zeilen zwischen der ersten Verwendung der customViewCell (Typ A) und der zweiten Erscheinung desselben Typs von customViewCell ist nicht gleich ..2 verschiedene Arten von benutzerdefinierten UITableViewCells in UITableView

mein CellForRowAtIndexPath sieht so aus.

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

    int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1]; 
    Feed *item = [[[[self selectedButton] category] feedsList] objectAtIndex:feedIndex + 1]; 
    static NSString *CellIdentifier = @"Cell"; 

    if(feedIndex == 0){ 
     MainArticleTableViewCell *cell = (MainArticleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     if (cell == nil) 
     { 
      cell = [[[MainArticleTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
      [[[cell subviews] objectAtIndex:0] setTag:111]; 
     } 

     cell.feed = item; 

     return cell; 

    } 
    else{ 
     NewsTableViewCell *cell = (NewsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     if (cell == nil) 
     { 
      cell = [[[NewsTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier orientation:currentOrientation] autorelease]; 
      [[[cell subviews] objectAtIndex:0] setTag:111]; 
     } 

     cell.feed = item; 

     return cell; 

    } 
    return nil; 
}  

Die zwei Arten von Zellen haben unterschiedliche Höhen, die richtig eingestellt sind. Könnte mir jemand in die richtige Richtung zeigen, wie man den Typ Eine benutzerdefinierte Zelle nur für die ersten Nachrichten erscheinen lässt (wird nicht wiederverwendet)? danke

+0

für die Schnelle Version dieser Frage siehe [hier] (http://stackoverflow.com/ Fragen/30774671/uitableview-with-more-als-one-custom-cells-with-swift) – Honey

Antwort

78

Sie sollten eine andere Zellenkennung für die beiden Arten von Zelle erstellen:

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

int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1]; 
Feed *item = [[[[self selectedButton] category] feedsList] objectAtIndex:feedIndex + 1]; 

static NSString *CellIdentifier1 = @"Cell1"; 
static NSString *CellIdentifier2 = @"Cell2"; 

if(feedIndex == 0) { 

    MainArticleTableViewCell *cell = (MainArticleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1]; 

    if (cell == nil) { 
     cell = [[[MainArticleTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier1] autorelease]; 
     [[[cell subviews] objectAtIndex:0] setTag:111]; 
    } 

    cell.feed = item; 

    return cell; 
} 
else { 
    NewsTableViewCell *cell = (NewsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2]; 

    if (cell == nil) { 
     cell = [[[NewsTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier2 orientation:currentOrientation] autorelease]; 
     [[[cell subviews] objectAtIndex:0] setTag:111]; 
    } 

    cell.feed = item; 

    return cell; 
} 

return nil; 
} 
+0

danke, es hat funktioniert. Weißt du, ob es möglich ist, verschiedene benutzerdefinierte Zellen für verschiedene Abschnitte eines TableViews zu setzen? Abschnitt 0 wird Typ A und Abschnitt 1 wird Typ B haben. Vielen Dank –

+0

gefunden der answear .. (NSIndexPath *) indexPath hat die Zeile Eigenschaft auch die Abschnitt-Eigenschaft, die nützlich war :) Sorin –

+0

int feedIndex = indexPath.row; - ist gut genug in der ersten Zeile –

8

ich nicht ganz verstehe Ihre Frage, aber bemerkt, zwei seltsame Dinge. Wenn Sie zwei verschiedene Zelltypen verwenden, müssen Sie beim Aufrufen von 'dequeueReusableCellWithIdentifier' zwei unterschiedliche Zellkennungen verwenden. Sie verwenden derzeit denselben Bezeichner für beide, was inkorrekt ist. Versuchen Sie so etwas wie:

static NSString *MainArticleIdentifier = @"MainArticle"; 
static NSString *NewsIdentifier = @"News"; 

Außerdem habe ich noch nie etwas Vergleichbares gesehen:

int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1]; 

Warum nicht einfach verwenden:

int feedIndex = indexPath.row; 
0

in cellForRowAtIndexPath

if ("Condition for cell 1") { 
     cellV = ("customCell" *)[tableView dequeueReusableCellWithIdentifier:@"your ID cell in .xib"]; 

     if (cellV == nil) { 
      [[NSBundle mainBundle] loadNibNamed:@"YOUR-CELL-FILENAME" owner:self options:nil]; 
      cellV = "OUTLET-CEll-IN-VC"; 
     } 
    } else { 
     cellV = ("customCell" *)[tableView dequeueReusableCellWithIdentifier:@"your ID cell2 in .xib"]; 

     if (cellV == nil) { 
      [[NSBundle mainBundle] loadNibNamed:@"YOUR-CELL2-FILENAME" owner:self options:nil]; 
      cellV = "OUTLET-CEll-IN-VC"; 
     } 
    } 

[self configureCell:cellV indexpath:indexPath withClipVo:clip]; 

return cellV; 
Verwandte Themen