Comment ajouter le geste à UITableViewCell?
Je veux ajouter un robinet geste à chaque cellule dans un UITableView
qui modifie le contenu en elle. Les deux façons d'ajouter un geste sont dans le code ou par le biais de storyboard. J'ai essayé les deux et ils ont échoué.
Puis-je ajouter un geste pour chaque cellule du tableau avec le storyboard glisser-déposer? Il semble seulement ajouter le geste à la première cellule. L'ajout de geste dans le code, j'ai écrit quelque chose comme,
addGestureRecognizer(UITapGestureRecognizer(target: self,action:#selector(MyTableViewCell.tapEdit(_:))))
ou
addGestureRecognizer(UITapGestureRecognizer(target: self, action:"tapEdit:"))
à la fois le travail. Mais j'aimerais dire à la UITableViewController
gérer ce geste parce qu'il fait quelque chose avec la source de données. Comment puis-je écrire mon objectif et d'action?
EDIT:
addGestureRecognizer(UITapGestureRecognizer(target: MasterTableViewController.self, action:#selector(MasterTableViewController.newTapEdit(_:)))
il induire une erreur a dit, non reconnu sélecteur envoyé à la classe 0x106e674e0...
- Ajouter UIButton sur UITableViewCell avec un numéro de balise unique de chaque bouton. Attribuer une méthode de bouton. Vous pouvez obtenir le numéro d'étiquette sur la méthode
Vous devez vous connecter pour publier un commentaire.
Pour ajouter geste de UITableViewCell, vous pouvez suivre les étapes ci-dessous:
Tout d'abord, ajoutez un geste de reconnaissance à UITableView
Ensuite, définissez le sélecteur. Utilisation
recognizer.locationInView
pour localiser la cellule que vous appuyez sur dans la tableView. Et vous pouvez accéder aux données de votre source de données partapIndexPath
, qui est le indexPath de la cellule de l'utilisateur exploité.Il est possible d'ajouter geste directement à TableView de la cellule et de l'accès à la source de données dans le viewController, Vous devez configurer un délégué:
Dans votre cellule personnalisé:
Dans votre viewController:
Cependant, cette méthode pourrait causer des problèmes, voir UIGestureRecognizer et UITableViewCell problème. Dans ce cas, lorsque le geste de balayage succès, le sélecteur d'être appelé deux fois pour une raison quelconque. Je ne peux pas dire que la deuxième méthode est un mal que je n'ai pas trouvé aucune preuve directe, mais après une recherche sur Google, il semble que la première méthode est la méthode standard.
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(MyTableViewCell.tapEdit(_:)))
delegate
, voir ma réponse mis à jourUITableViewController
comme cible si le codeUITapGestureRecognizer(target: MasterViewController ...)
est dansMyUITableViewCell.swift
. Erreur se produit. @luiyezhengVous n'avez pas besoin d'ajouter geste de reconnaissance pour atteindre ce que vous faites.
UITableViewDelegate
méthodetableView:didSelectRowAtIndexPath:
pour détecter la ligne qui est taraudé (c'est quoi exactement votretapGesture
va faire) et ensuite faire votre choix de traitement.tableView:didEndDisplayingCell:forRowAtIndexPath:
juste avant de retourner la cellule:cell?.selectionStyle = .None
awakeFromNib
méthode dans la classe de cellulesAjoutant le geste à awakeFromNib méthode semble beaucoup plus facile et fonctionne très bien.