2009-07-27 6 views
1

Je me demandais comment je peux réaliser ce qui suit:
En créant un bouton suivant et quand il est tapé la prochaine ligne UITableview sera sélectionnée.frapper un bouton suivant pour un UITableViewcell

Depuis une image vaut mille mots j'ai ajouté une capture d'écran.

http://img529.imageshack.us/img529/4341/picture5uuj.png

Comme vous pouvez le voir ci-dessous j'ai ajouté une barre d'outils et si j'appuie sur le bouton droit, il doit sélectionner la ligne suivante. Toutes les suggestions sur la façon dont je peux aborder cela (je suppose avec une sorte d'itérateur).

ps. Je veux que la ligne agisse aussi comme si elle avait été touchée (donc je peux mettre une action derrière)

Répondre

1

Quelque chose comme ça devrait faire l'affaire:

- (void)selectNextRow 
{ 
    NSIndexPath *selectedRow = [self.tableView indexPathForSelectedRow]; 
    NSUInteger row = selectedRow.row; 
    NSUInteger section = selectedRow.section; 
    ++row; 
    if(row >= [self.tableView numberOfRowsInSection:selectedRow.section]) 
    { 
    row = 0; 
    ++section; 
    if(section >= [self.tableView numberOfSections]) 
    { 
     row = 0; 
     section = 0; 
    } 
    } 
    NSIndexPath *rowToSelect = [self tableView:self.tableView willSelectRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section]]; 
    [self.tableView selectRowAtIndexPath:rowToSelect animated:YES scrollPosition:UITableViewScrollPositionMiddle]; 
    [self tableView:self.tableView didSelectRowAtIndexPath:rowToSelect]; 
    // also, post notifications if desired 
} 
+0

super thnx man ..malheureusement j'ai oublié d'ajouter la partie que la ligne doit faire comme si elle avait été cliquée;) .. ce code est parfait fait quelque chose de similaire mais malheureusement il n'agit pas comme un toucher (pour par exemple, si vous avez touché la deuxième rangée, il obtiendrait l'action derrière cette cellule) .. mais merci beaucoup de toute façon –

+0

Oui, c'est un comportement attendu. De la documentation de selectRowAtIndexPath: animated: scrollPosition: "L'appel de cette méthode n'entraîne pas pour le délégué de recevoir un message tableView: willSelectRowAtIndexPath: ou tableView: didSelectRowAtIndexPath: ni d'envoyer des notifications UITableViewSelectionDidChangeNotification aux observateurs." En d'autres termes, vous devrez appeler ces méthodes vous-même. J'ai modifié le code ci-dessus pour le faire. – sarnesjo

+0

Ok super thnx ... mais j'ai fait quelques ajustements .. tout ce dont j'avais besoin était celui-ci [self tableview: [self tableView] didSelectRowAtIndexPath: selectedRow]; mais encore une fois thnx –

1

Peut-être que votre question a une certaine complexité, mais vous pouvez simplement suivre la ligne sélectionnée votre code et, lorsque vous obtenez l'événement à partir du bouton de la barre d'outils, incrémenter votre index de ligne sélectionnée et utilisez le:

-selectRowAtIndexPath:animated:scrollPosition: 

sur votre table pour sélectionner la ligne?

+0

ok super man merci .. mais j'oublié de mentionner que je voudrais d'agir comme si elle était choisie, touché;) thnx pour la réponse si –

+0

Si vous implémentez -tableView: didSelectCellAtIndexPath: normalement, pourquoi ne pas appeler directement cette méthode? Vous êtes en train de calculer un 'indexPath' pour la ligne, appelez simplement la méthode delegate de sélection. –

+0

Excusez-moi, c'est '-tableView: didSelectRowAtIndexPath:' pas didSelectCellAtIndexPath. Devrait avoir vérifié, désolé. –

1
- (IBAction)btnClicked:(id)sender 
{ 
    NSIndexPath *selectedRow = [self.MyTableview indexPathForSelectedRow]; 
    int i=selectedRow.row; 
    i++; 

    NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:i inSection:0]; 
    [MyTableview selectRowAtIndexPath:selectedCellIndexPath animated:false scrollPosition:UITableViewScrollPositionMiddle]; 
}