web-dev-qa-db-fra.com

Lancer une méthode à partir d'une cellule statique dans un contrôleur en vue tableau

Dans mon code, j'ai une table avec une cellule statique dans les storyboards. J'essaie de déclencher une méthode en cliquant sur la dernière cellule statique.

Que dois-je écrire dans le code pour que cela se produise. Comment puis-je faire référence à des cellules statiques à l'intérieur du code sans erreur de déclenchement.

24
carbonr

Dans le viewController, ajoutez:

@property (nonatomic, weak) IBOutlet UITableViewCell *theStaticCell;  

Connectez cette prise à la cellule du storyboard.

Maintenant dans la méthode tableView:didSelectRowAtIndexPath:

UITableViewCell *theCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
if (theCellClicked == theStaticCell) {
    //Do stuff
}
76
Gobot

Avec les cellules statiques, vous pouvez toujours implémenter - tableView:didSelectRowAtIndexPath: et vérifier le chemin indexPath. Une approche consiste à définir le chemin indexPath particulier avec #define et à vérifier si la ligne sélectionnée est à ce chemin indexPath. Si oui, appeler [self myMethod].

9
Canopus

Voici ma prise en mélangeant des cellules statiques et dynamiques,

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
                    if let staticIndexPath = tableView.indexPathForCell(self.staticCell) where staticIndexPath == indexPath {
// ADD CODE HERE 
                }
        }

cela évite de créer une nouvelle cellule. Nous sommes tous habitués à créer la cellule et à la configurer dans cellForRowAtIndexPath

3
CiNN

Après la réponse de CiNN, voici la version Swift 3 qui résout le problème.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if let staticIndexPath = tableView.indexPath(for: OUTLET_TO_YOUR_CELL), staticIndexPath == indexPath {
        // ADD CODE HERE
    }
}

cette approche permet de ne pas implémenter la méthode cellForRow, spécialement si vous utilisez des cellules statiques sur le storyboard.

0
mourodrigo

Je pense que tu avais le même problème que moi. Je continuais à avoir une erreur en surchargeant tableView:didSelectRowAt, et la raison en était que j'avais l'habitude d'appeler super.tableView:didSelectRowAt, mais dans ce cas, nous ne voulons pas le faire. Il suffit donc de supprime l'appel à la méthode super class pour éviter l'erreur d'exécution.

0
Raimondo Previdi