J'ai un problème avec UITableView's
didSelectRowAtIndexPath
.
Ma table est configurée de sorte que lorsque je sélectionne la ligne, elle initialise un nouveau contrôleur de vue et le pousse.
La première fois que j'appuie sur une ligne du tableau, la méthode n'est pas appelée. Une fois que j'ai sélectionné une autre ligne, elle commence à fonctionner normalement.
J'ai vérifié cela en définissant un point d'arrêt didSelectRowAtIndexPath
. Lors de l'ajout d'un NSLog
à la méthode, je vois que lorsque je sélectionne la deuxième ligne qui pousse finalement le nouveau contrôleur de vue, je vois deux instructions de journal apparaître dans la console en même temps.
Aucune suggestion?
uitableview
cocoa-touch
uikit
didselectrowatindexpath
Mark Adams
la source
la source
tableView:didSelectRowAtIndexPath:
?Réponses:
Y a-t- il une chance que vous ayez accidentellement tapé De selectRowAtIndexPath?
la source
Vérifiez également la propriété de sélection de votre vue de table dans le fichier xib. Utilisez «Sélection unique» ou «Sélection multiple» selon les besoins.
la source
J'ai rencontré le problème suivant:
Dans mon cas, mon erreur consistait à vérifier
Show Selection on Touch
Interface Builder. Vous pouvez le décocher dans IB ici:J'espère que cela aide quelqu'un
la source
Cochez Si vous avez défini des modules de reconnaissance de gestes dans votre classe. Supprimer le geste a fonctionné pour moi.
la source
J'ai débattu même de la publication de cette réponse parce que je pense que les étoiles se sont alignées pour que cela se manifeste.
J'ai une variation de ce problème et j'ai vérifié les autres solutions. Sur ma vue de table, il ne traite pas la toute dernière ligne de ma table au premier tapotement. Il le met en évidence, mais
didSelectRowAtIndexPath
n'est pas appelé. Toutes les autres rangées fonctionnent bien. Mais si j'active le rebond de la table, cela semble résoudre le problème (mais alors vous devez faire face à un rebond de la table).la source
UITableViewCellSelectionStyleNone a été défini pour la cellule affichant ce problème (ios9).
J'ai fini par appeler
première chose
ce qui n'est pas pareil, mais c'est assez bon. me fait me demander quel genre de rupture de table ios10 apporte.
la source
setSelected
mais pendant que l'utilisateur tient la cellule, la sélection apparaît, ce qui n'est pas acceptableSWIFT 2
Assurez-vous que ce paramètre est défini sur true:
self.tableView.allowsSelection = true
Mettre cela au- dessus de votre droite après votre
viewDidLoad()
et avant lasuper.viewDidLoad()
la source
SWIFT 3
Si vous travaillez avec Swift 3 dans une classe qui n'est pas un
UITableViewController
et que vous utilisezUITableViewDelegate
, vous devrez peut-être utiliser le titre de la méthode:Cela a fonctionné pour moi, même si je viens de migrer mon projet vers Swift 3. C'est assez nouveau, donc cela peut être corrigé plus tard.
la source
Si vous avez défini un UITapGestureRecognizer dans votre classe, vous pouvez ajouter cette ligne dans votre didSelectRowAtIndexPath:
Cela a fonctionné pour moi.
la source
ce problème se produit également lorsque vous travaillez avec l'outil de reconnaissance des gestes dans une table. Dans ce cas, vous n'avez pas besoin de les supprimer, il vous suffit de vous assurer que votre propriété de geste
cancelsTouchesInView = false
est une valeur booléenne affectant si des touches sont fournies à une vue lorsque un geste est reconnu.la source
SWIFT 3
Aucune des autres réponses n'a fonctionné dans mon cas, ce qui l'a corrigé pour moi était:
tableView.delaysContentTouches = false
la source
didSelectRowAt
La fonction n'a pas été appelée dans mon application au premier ou au deuxième appui ... J'essayais de résoudre le problème, je n'ai trouvé aucune solution. Mais soudain, j'ai été reconnu, j'utilisais view.animation changement de couleur ... laDelegate
méthode n'a pas été appelée pendant que l'animation persistela source
Dans mon cas, j'avais un en-tête de section UITableView avec un reconnaisseur de gestes. Lorsque l'en-tête est tapé, il doit insérer quelques lignes dans cette section et animer l'insertion (comme développer / réduire la section). La première fois lorsqu'elle a été développée et appuyée, la méthode déléguée didSelectRow n'a pas été déclenchée. Pour d'autres taps et actions de développement / réduction, cela fonctionnait comme prévu.
Selon la réponse de @Ayoub Nouri, j'ai défini cancelsTouchesInView sur false, ce qui a résolu le problème. tapGestureRecognizer? .cancelsTouchesInView = false
la source
Swift 4.2
La désactivation de "Delay Touch Down" dans l'inspecteur d'attributs a résolu le problème.
Après cela, les clics sont fluides et didSelectRowAt se déclenche immédiatement.
la source
Ce qui a fonctionné pour moi, c'est de commencer à taper "didSelect ..." puis de laisser la correction automatique remplir le reste. Apparemment, certains détails de ma syntaxe étaient loufoques. Comme d'autres l'ont dit, utilisez l'IDE !!
la source