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