Frage

in meinem UITableView ich will Sekunde für die erste Nachricht von einer RSS-Feed eine benutzerdefinierte tableViewCell (Typ A kann sagen) und für die anderen Nachrichten einzustellen, dritter etc .. andere benutzerdefinierte tableViewCell (trype B) das Problem ist, dass die benutzerdefinierte tableViewCell (trype A) für die erste Nachricht erstellt wird wieder verwendet, aber neugierig die Anzahl der Zeilen zwischen dem ersten Gebrauch des customViewCell (Typ A) und dem zweiten Auftritt des gleichen Typs von customViewCell nicht gleich ..

meine cellForRowAtIndexPath es 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 die beiden Typen von Zellen haben unterschiedliche Höhen, die richtig eingestellt ist. könnte mir jemand in die richtige Richtung zeigen, wie der Typ A benutzerdefinierte Zelle für die ersten Nachrichten erscheinen nur zu machen (nicht wiederverwendet zu werden)? danke

War es hilfreich?

Lösung

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;
}

Andere Tipps

ich nicht ganz verstehe Ihre Frage, aber bemerkt, zwei seltsame Dinge. Wenn Sie mit zwei verschiedenen Zelltypen benötigen Sie zwei verschiedene Zellkennungen zu verwenden, wenn ‚dequeueReusableCellWithIdentifier‘ aufrufen. Sie verwenden zur Zeit den gleichen Bezeichner für beide, die nicht korrekt ist. Versuchen Sie so etwas wie:

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

Auch ich habe noch nie gesehen, so etwas wie:

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

Warum nicht einfach verwenden:

int feedIndex = indexPath.row;

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top