2009-08-24 13 views
17

J'ai créé un UITableView et je voudrais qu'un UITableViewCell spécifique apparaisse sélectionné (bleu) lorsque la vue est chargée.Comment sélectionner un UITableViewCell par défaut?

+0

Voir cette question: http://stackoverflow.com/questions/19295297/uitableviewcell- set-selected-initialement/25128427 # 25128427 –

Répondre

0

Utilisez la méthode UITableViewCell

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 

Infos here.

+0

Peut-être que la méthode suivante convient mieux? http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableViewCell/setHighlighted:animated: –

+0

quelle méthode? le lien ne va pas à une méthode particulière – Daniel

+1

O si etnd il, celui-là met en évidence et ne le sélectionne pas, je suppose que c'est tout le demandeur veut alors sûr que c'est plus approprié – Daniel

6

Soyez judicieux en utilisant cette méthode, car la sélection de la ligne de cette manière est quelque chose que Apple suggests against fait pour montrer un état "choisi".

Au lieu de cela, envisagez de définir la propriété accessoryType de la cellule sur UITableViewCellAccessoryCheckmark.

+0

J'essaie de reproduire l'utilisation d'Apple UI lorsque vous ajoutez/Editer un événement dans l'application Calendrier et définir une date/heure de début et de fin. J'ai vu des commentaires sur la règle de coche ailleurs, mais je ne sais pas si cela s'appliquerait dans ce cas (la table est utilisée pour mettre en page des composants plutôt que présenter une liste de données). – user119857

+0

C'est un point intéressant.Dans ce cas, ils n'ont pas besoin d'avoir une sous-vue pour chaque début et fin car ils représentent tous deux le même type de données, modifié par le même type de UIPickerView. Cela représenterait donc un usage judicieux. Ils utilisent probablement la méthode selectRowAtIndexPath de UITableView: animated: scrollPosition: ... voir http://tinyurl.com/yd9zs65 –

1

Soyez vigilant. Je suis sûr que vous avez une bonne raison, mais regardez attentivement le document Human Interface Guidelines fourni par Apple. Les applications sont rejetées pour ne pas désélectionner les lignes de table. Je vous encourage à trouver la section appropriée du HIG et voir Apple offre des suggestions.

41
-(void)viewWillAppear:(BOOL)animated { 
    // assuming you had the table view wired to IBOutlet myTableView 
    // and that you wanted to select the first item in the first section 
    [myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
          animated:NO 
         scrollPosition:UITableViewScrollPositionTop]; 
} 

J'utilise cette technique pour sélectionner l'un des deux UITableViewCells afin que les utilisateurs ne sait quelle cellule une vue UIDatePicker dessous de la table il effet. Cette technique est utilisée par Apple dans l'application de calendrier lorsque vous créez un nouvel événement et définissez les dates.

+1

1. cela ne fonctionne pas pour moi. 2. Apple dit que vous devez utiliser une coche pour indiquer l'état de sélection d'un élément. –

3

Vous devriez le mettre dans viewWillAppear.

[myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
         animated:NO 
        scrollPosition:0]; 

Si vous essayez de le sélectionner dans cellForRowAtIndexPath:, il ne prendra pas le style requis.

0

Parfois, lorsque vous n'êtes pas dans un UIViewController, vous n'avez pas viewWillAppear, et parfois, vous avez créé votre UITableView par programme.

La solution facile est de mettre en œuvre cette méthode delegate:

- (void)tableView:(UITableView *)tableView 
     willDisplayCell:(UITableViewCell *)cell 
     forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (self.selectedIndex == indexPath.row) { 
     cell.selected = YES; 
    } 
} 

Il est ne fonctionne pas dans le cellForRowAtIndexPath parce que la cellule n'est pas encore affichée. et la méthode setSelected est appelée juste quand celle-ci est affichée.

1

Utilisez ce code pour sélectionner la cellule par défaut dans la vue tableau, indexPath peut être varier en fonction de vos besoins

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
    [theTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 
} 
Questions connexes