Swift UITableView didSelectRowAtIndexPath pas appelé
Nouvelle pour le développement d'IOS et éprouve des difficultés avec la gestion de la cellule de sélection sur une table. Chaque fois que je sélectionne, la méthode n'est pas appelée ci-dessous - aucune idée pourquoi?
Mon projet de la structure est:
- Vue-Contrôleur -> View -> Affichage de Tableau
Le code ci-dessous montre les appels de méthode. Les autres s'appelle pas de problème! Je sais tactile fonctionne comme tirer vers le bas avec succès rafraîchit et en cliquant sur une cellule qui ne se mettent en évidence.
import UIKit
class ViewController: UIViewController, UITableViewDelegate
{
let blah = ["blah1"]
//How many sections are in the table?
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
//How many rows? (returns and int)
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return blah.count
}
//table contents for each cell?
//Each time this is called it'll return the next row and thus build a table...
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
print("Populating each cell of table view!\n")
tableView.rowHeight = 80.0
var cell = UITableViewCell()
var(a) = blah[indexPath.row]
var image : UIImage = UIImage(named: a)!
cell.imageView.image = image
return cell
}
//Code Cell Selected
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
println("You selected cell #\(indexPath.row)!")
}
func tableView(tableView: UITableViewDelegate, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
print("wananananaanan" )
println("You deselected cell #\(indexPath.row)!")
}
override func viewDidLoad() {
super.viewDidLoad()
//Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//Dispose of any resources that can be recreated.
}
}
avez-vous définissez-vous comme les vues de table délégué?
OriginalL'auteur Mark | 2015-03-15
Vous devez vous connecter pour publier un commentaire.
Vous devez définir un
@IBOutlet
à latableView
en vousViewController
et de définir comme c'estdelegate
etdataSource
vous pouvez voir les données et de réagir aux changements dans latableView
.Quelque chose comme ceci :
Et met en œuvre la
UITableViewDataSource
protocole de trop.Ou vous pouvez le faire aussi dans l'Interface du Générateur de définir la
ViewController
comme il est délégué etdataSource
(plus facile à faire je pense) et d'éviter de régler manuellement dans le code comme ci-dessus. C'est à vous.J'espère que cela vous aidera.
UIViewController
, utilisezUITableViewController
- ensuite, vous obtenez beaucoup de fonctionnalités gratuitement. Par exemple, leUITableView
sera déjà en place pour vous avec les délégués pointant vers votre vue-contrôleur.Oui bien sûr, le commentaire de @Stefan est valide aussi!
Merci, cela a parfaitement fonctionné! (Je suis allé avec l'option rapide de paramétrage de l'Affichage du Contrôleur en tant que délégué de la sortie.
le
.delegate = self
complètement résolu ce problème pour moi. Je suis surpris que je ne l'ai pas fait avant. Ressemble vues de table peuvent emporter des tonnes de fonctionnalités sans réglage de ce délégué de la valeur.Compagnons de Googlers: Vous devez passer
UITableViewDelegate
dans votre déclaration de classe pour obtenir.delegate
à travailler!!!! Par exemple, ma classe est appeléePickFavVC
. C'est ce que j'ai dansPickFavVC.swift
:class PickFavVC: UIViewController, UITableViewDataSource, UITableViewDelegate {
OriginalL'auteur Victor Sigler
SWIFT 3
Utilisons la méthode du délégué à swift 3
OriginalL'auteur Lineesh K Mohan
Tout le monde est à mentionner pour définir la source de données et les supprimer de la tableView.
Mais après réglage ne fonctionne pas bien, alors que parfois, il peut arriver en raison de l'absence ou de désactiver la sélection de la vue de la table.
Pour l'activer
Aller au storyboard -> Sélectionnez tableView -> cliquez sur l'attribut inspecteur ->aller à l'sélecteur -> sélection unique de sélection (ou de plusieurs de sélection selon les besoins.)
Veuillez trouver ci-joint la capture d'écran à votre convenance.
OriginalL'auteur Himani Sharma
J'ai fait face à la même question quand a comparé deux identiques exemples de code où l'on travaillait bien et l'autre n'a pas l'appel
didSelectRowAtIndexPath
Prendre un coup d'oeil à deux voies possibles pour résoudre le problème:
1) Dans le code lui-même:
2) à l'Aide de maquette ou de structure du Document (ce qui était le problème dans mon cas, la cause de storyboard modifications ne sont pas visibles .swift classes de contrôleur.
Ouvrir structure du Document et
Control + Press
votreTableView
vous verrez deux points de vente appelé "
delegate
" et "dataSource
"faites-les glisser 1 par 1 pour le contenant
ViewController
(à droite sur le cercle jaune)Que c'est!
OriginalL'auteur Ivan V
Deux vérifications qui peuvent vous aider:-
myTableView.allowsSelection = true
myTableView.delegate = self
Assurez-vous que vous avez écrit
didSelectRowAt
correctement:func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
Si vous utilisez
UIButton
surUITableViewCell
puis elle chevauche la cellule afin de vérifier La Solution iciOriginalL'auteur Jack
Vous devez utiliser cela: d'Abord prendre un coup d'oeil de quoi êtes-vous de l'extension et ensuite utiliser la méthode tableView.
OriginalL'auteur Victor Ruiz C.