//

Tableview doet vreemd

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 ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Zoeken Berichten van vandaag Markeer forums als gelezen
  #1  
Oud 13-08-11, 20:53
Jeroen0704 Jeroen0704 is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2009
Berichten: 137
Standaard 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.
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 13-08-11, 21:30
Hollance Hollance is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Oct 2010
Locatie: Breda
Berichten: 68
Standaard

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  
Oud 13-08-11, 23:13
Jeroen0704 Jeroen0704 is offline
• iOS 5.0.1
• 5.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2009
Berichten: 137
Standaard

Bedankt!

Nu werkt het goed, en heb ik weer wat bijgeleerd
  #4  
Oud 15-08-11, 13:35
JornZ JornZ is offline
• iOS 6.1.3
• 6.1.2
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2010
Berichten: 364
Standaard

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.
Reageren



Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)

 
Discussietools
Weergave

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

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 16:17.