ios guidelines select




Comment détecter la cellule tableView touchée ou cliquée rapidement (6)

Cela a bien fonctionné pour moi:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("section: \(indexPath.section)")
        print("row: \(indexPath.row)")
    }

Le résultat devrait être:

section: 0
row: 0

J'essaie d'obtenir l' index de l'élément sélectionné dans TableView et de commencer une activité par la suite. Malheureusement, la plupart des solutions que j'ai trouvées sont en Objective-C ou ne fonctionnent pas.

Méthode func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) pas l'étiquette de la cell .

quelqu'un peut m'aider s'il vous plait?

import UIKit
import ResearchKit

class TaskListViewController: UIViewController, UITableViewDataSource {

    let tasks=[("Short walk"),
        ("Audiometry"),
        ("Finger tapping"),
        ("Reaction time"),
        ("Spatial span memory")
    ]


    //how many sections are in your table
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    //return int how many rows
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tasks.count
    }

    //what are the contents

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = UITableViewCell()

        var (testName) = tasks[indexPath.row]
        cell.textLabel?.text=testName
        return cell
    }

    // give each table section a name

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

        return "Tasks"

    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        let indexPath = tableView.indexPathForSelectedRow();

        let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!

        println(currentCell.textLabel!.text)
    }


    override func viewDidLoad() {
        super.viewDidLoad()

    }  
}

Après quelques essais, j'ai remplacé le code par un code différent de celui trouvé. Et ça ne marche pas aussi. Maintenant, je pense que c'est le problème avec le simulateur iOS ...

import UIKit
import ResearchKit

class TaskListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet
    var tableView: UITableView?
    var items: [String] = ["We", "Heart", "Swift"]

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.items.count;
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell:UITableViewCell = self.tableView!.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell

        cell.textLabel?.text = self.items[indexPath.row]

        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        println("You selected cell #\(items[indexPath.row])!")
    }

}


Hériter du délégué tableview et de la source de données. Mettez en place les délégués dont vous avez besoin.

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
    }

Et enfin implémenter ce délégué

     func tableView(_ tableView: UITableView, didSelectRowAt  
     indexPath: IndexPath) {
     print("row selected : \(indexPath.row)")
  }

Le problème a été résolu par moi-même en utilisant le tutoriel de weheartswift


Quelques choses qui doivent arriver ...

  1. Le contrôleur de vue doit étendre le type UITableViewDelegate

  2. Le contrôleur de vue doit inclure la fonction didSelectRowAt .

  3. Le contrôleur de vue doit être attribué à la vue de la table en tant que son délégué.

Ci-dessous se trouve un endroit où l'attribution du délégué pourrait avoir lieu (dans le contrôleur de vue).

override func loadView() {
    tableView.dataSource = self
    tableView.delegate = self
    view = tableView
}

Et une simple implémentation de la fonction didSelectRowAt .

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("row: \(indexPath.row)")
}

Dans Swift 3.0

Vous pouvez trouver l'événement pour le contact / clic de la cellule de table avec la méthode déléguée. De même, vous pouvez trouver la valeur de section et de ligne de la cellule comme ceci.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
       print("section: \(indexPath.section)")
       print("row: \(indexPath.row)")
}

Pour obtenir un élément de Array dans la cellule tableau de vue touché ou cliqué en rapide

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell
    cell.textLabel?.text= arr_AsianCountries[indexPath.row]
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let indexpath = arr_AsianCountries[indexPath.row]
print("indexpath:\(indexpath)")
}