2010-01-13 8 views
2

Je veux faire quelque chose de très simple avec mon UITableView: Je veux ajouter un UIActivityIndicatorView à la vue d'en-tête d'une section, et la faire animer ou disparaître quand je veux.Comment accéder à un UIActivityIndicatorView dans la vue d'en-tête d'une section UITableView?

Je n'avais pas du mal à ajouter le UIActivityIndicatorView à la vue d'en-tête en utilisant tableView: viewForHeaderInSection:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
UIView* customView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 60.0)]; 

// create the title 
UILabel * headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 12.0, 310.0, 22.0)]; 
headerLabel.text = @"some random title here"; 

[customView addSubview:headerLabel]; 
[headerLabel release]; 

// Add a UIActivityIndicatorView in section 1 
if(section == 1) 
{ 
    [activityIndicator startAnimating]; 
    [customView addSubview:activityIndicator]; 
} 

return [customView autorelease]; 

}

activityIndicator est une propriété de la classe de mon contrôleur. Je alloc dans la méthode viewDidLoad:

- (void)viewDidLoad 
{ 
(...) 
activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(200, 10, 25, 25)]; 
} 

De cette façon, je peux envoyer des messages à lui (comme -startAnimating ou -stopAnimating) chaque fois que je veux. Le problème est que le activityIndicator disparaît dès que je fais défiler la tableView (je suppose que c'est parce que la méthode tableView: viewForHeaderInSection: est appelée une deuxième fois). Comment sinon ajouter une activityIndicatorView à la vue d'en-tête de la section et pouvoir encore lui envoyer des messages par la suite? (avec l'activitéIndicator ne disparaît pas quand je défile vers le bas bien sûr)

Merci beaucoup!

Répondre

0

Si vous essayez d'utiliser le même indicateur d'activité à plusieurs endroits, il est probable qu'il soit déplacé d'un endroit à l'autre. Je crois que vous en avez besoin d'un différent pour chaque en-tête de section. Vous pouvez utiliser un MutableArray pour suivre les vues d'en-tête que vous créez afin de pouvoir les réutiliser si vous en trouvez une dans le tableau qui n'a pas de vue d'ensemble, un peu comme les cellules dequeuing et de réutilisation.

Ceci est juste une supposition que je n'ai pas fait, mais je suis sûr que le problème est d'essayer de réutiliser la même vue à plusieurs endroits.

+0

Je ne veux pas avoir un indicateur d'activité à plusieurs endroits, juste un. – nmondollot

+0

Eh bien, c'est ce que vous aviez l'air d'essayer de faire puisque je ne pouvais pas imaginer d'autre raison pour continuer à ajouter la sous-vue à la même – Nimrod

0

Le problème semblait provenir de la recréation d'un customView et de l'ajout de activityIndicator en tant que sous-vue à chaque fois que tableView: viewForHeaderInSection: est appelée.

Ne pas utiliser subviews m'a aidé à réparer ce:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 

// Add a UIActivityIndicatorView in section 1 
if(section == 1) 
{ 
    [activityIndicator startAnimating]; 
    return activityIndicator; 
} 

    UIView* customView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 60.0)]; 

// create the title 
UILabel * headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 12.0, 310.0, 22.0)]; 
headerLabel.text = @"some random title here"; 

[customView addSubview:headerLabel]; 
[headerLabel release]; 


return [customView autorelease]; 
} 

(il semble assez laid cependant, le activityIndicator prend toute la largeur de la section que je ferais mieux créer un CustomView unique pour l'article 1 et ajouter les. activityIndicator en tant que subview une fois pour toutes).

Questions connexes