Tableview doet vreemd discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) 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 ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
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: Code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 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 Laatst gewijzigd door Jeroen0704; 13-08-11 om 21:03. |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
|||
|
|||
Dat is niet zo raar want je hergebruikt cells van verschillende types door elkaar heen.
Je doet dequeueReusableCellWithIdentifier. Als die nil geeft maak je de nieuwe cell aan. To zover geen probleem. Maar als er genoeg cells zijn om te hergebruiken dan geeft dequeueReusableCellWithIdentifier je een bestaand cell object terug. Normaalgesproken gebruik je verschillende identifiers voor verschillende typen cells, maar jij gebruikt verschillende typen cells door elkaar heen met dezelfde identifier. De ene keer zal dequeueReusableCellWithIdentifier dus een normale cell teruggeven, de andere keer een "subtitle" cell, en dan klopt het dus niet meer. Gebruik dus verschillende identifiers voor verschillende cell types en dan werkt het wel goed. |
#3
|
|||
|
|||
Bedankt!
Nu werkt het goed, en heb ik weer wat bijgeleerd |
#4
|
|||
|
|||
Een andere methode is om in else statements (geen shuffle) de eigenschappen van de cell die mogelijk veranderd zijn toen deze cell wel werd gebruikt voor de shuffleoptie te veranderen naar de standaardwaarden.
Je hoeft niet twee "pools" (zo noem ik het maar even) met type cellen te gebruiken, dit kan ongunstiger zijn in geheugengebruik. |
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
Soortgelijke discussies |
||||
Discussie | Auteur | Forum | Reacties | Laatste bericht |
Iphone 3g Doet vreemd | DunnoNL | iPhone algemeen | 1 | 01-08-11 14:00 |
Toetsenbord doet vreemd | ProMac | iPhone algemeen | 13 | 18-03-11 17:26 |
Beeldscherm doet vreemd | Brandmeestertje | iPhone algemeen | 0 | 02-09-10 23:14 |
wi-fi doet wel erg vreemd | ggg | Archief | 4 | 30-04-10 19:28 |
restore doet vreemd | Reloader | iPhone algemeen | 12 | 15-04-09 21:58 |
|
|