5 berichten aan het bekijken - 1 tot 5 (van in totaal 5)
  • Q:
    Bijdrager
    Jeroen0704

    [OPGELOST] Tableview doet vreemd

    Hee,

    Ik ben met een muziek app bezig, genaamd Play It. Nu heb ik een probleem met mijn tableview bij de albums. Het is de bedoeling dat als er meer als 1 nummer in het album zit je een shuffle optie krijgt in de eerste cell en anders niet. Deze cell is ook de enige met een accessoryview, namelijk een shuffle icon. De andere cellen bestaan uit de titel van het nummer en de artiest. Alleen hierbij gaat iets fout. Sommige cellen krijgen ook een shuffle icon en de eerste cell met de shuffle optie krijgt af en toe een artiest.

    Zo ziet het er dan uit:

    Ik heb deze code gebruikt:

    – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *CellIdentifier = @”Cell”;

    UITableViewCell *cell = ;
    if (cell == nil) {

    if (shuffleOption ) {
    if ([indexPath row] == 0 && [indexPath section] == 0) {

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    } else {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    } else {

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    }

    cell.textLabel.textColor = [UIColor colorWithHue:((1.0/360)*120) saturation:((1.0/100)*2.94) brightness:((1.0/100)*13.33) alpha:1.0];
    cell.detailTextLabel.textColor = [UIColor colorWithHue:((1.0/360)*180) saturation:((1.0/100)*1.18) brightness:((1.0/100)*33.33) alpha:1.0];

    CGRect selectedBackgroundViewRect = CGRectMake(0, 0, 500, 80);
    UIImageView *backgroundImage = [[UIImageView alloc] initWithFrame:selectedBackgroundViewRect];
    backgroundImage.image = [[UIImage imageNamed:@”RedSelectedWithImage.png”] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
    [backgroundImage setContentMode:UIViewContentModeScaleToFill];
    cell.selectedBackgroundView = backgroundImage;
    [backgroundImage release];

    cell.textLabel.font = [UIFont systemFontOfSize:20];
    cell.detailTextLabel.font = [UIFont systemFontOfSize:15];

    if (shuffleOption) {
    if ([indexPath row] == 0 && [indexPath section] == 0) {

    UIImageView *accessoryImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@”ShuffleButtonSelected.png”]];
    cell.accessoryView = accessoryImageView;
    [accessoryImageView release];

    cell.textLabel.text = [albumSongs objectAtIndex:[indexPath row]];

    } else {
    cell.detailTextLabel.text = [songArtist objectAtIndex:[indexPath row]-1];
    cell.textLabel.text = [albumSongs objectAtIndex:[indexPath row]];
    }

    } else {

    cell.textLabel.text = [albumSongs objectAtIndex:[indexPath row]];
    cell.detailTextLabel.text = [songArtist objectAtIndex:[indexPath row]];
    }

    return cell;
    }

    het lijkt alsof hij wat cellen door elkaar haalt.

    Weet iemand hoe ik dit probleem kan verhelpen?

    Groeten Jeroen

    Bijdrager
    Jeroen0704

    sorry, maar Ik krijg de code niet goed werkend met de

     

    tags.

    Bijdrager
    mhrenes

    Beetje lastig om te lezen maar het probleem zit hem in het onjuist gebruiken van dequeueReusableCellWithIdentifier. Als ik je code goed volg maak je indien er geen cell gerecycled kan worden een nieuwe aan. Deze pas je aan naar gelang de shuffleoption en positie in je tableView. Probleem is als je dus een wel een hergebruikte cell krijgt, die heeft misschien al een accessoryView en kan ook van een verkeerd type zijn (styleDefault vs styleSubtitle). De beste optie is denk ik om afhankelijk van het type cell wat je nodig hebt een aparte cellIdentifier te maken en te kijken of daar een herbruikbare cell van beschikbaar is, zoniet: dan genereer je die.

    In pseudo code:

    <br />
    if ( shuffle option ) {<br />
         if ( !(cell = ) ) {<br />
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"shuffleOptionCell"] autorelease];<br />
         }<br />
         ... pas je cell aan<br />
    }<br />
    else {<br />
        ... doe iets soortgelijks voor de andere cells die je nodig hebt (met andere cellIdentifiers dus!)<br />
    }<br />
     
    Bijdrager
    Jeroen0704

    Bedankt!

    Ik heb het aangepast en nu werkt het goed!

    Inactief
    Anoniem

    He leuk je hier te zien jeroen!

5 berichten aan het bekijken - 1 tot 5 (van in totaal 5)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.