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: http://img849.imageshack.us/img849/2855/albumerror.png Ik heb deze code gebruikt: Code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath het lijkt alsof hij wat cellen door elkaar haalt. Weet iemand hoe ik dit probleem kan verhelpen? Groeten Jeroen |
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. |
Bedankt!
Nu werkt het goed, en heb ik weer wat bijgeleerd:) |
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. |
Alle tijden zijn GMT +2. Het is nu 20:58. |