So erkennen Sie schnell berührte oder angeklickte tableView-Zellen


76

Ich versuche, das indexausgewählte Element zu entfernen TableViewund danach eine Aktivität zu starten. Leider sind die meisten Lösungen, die ich gefunden habe, in Objective-C oder funktionieren nicht.

Methode func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)drucken Sie das cellEtikett nicht ..

Kann mir bitte jemand helfen?

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()
        
    }  
}

Nach einigen Versuchen habe ich den Code in einen anderen als das gefundene Tutorial geändert. Und es funktioniert auch nicht. Jetzt denke ich, dass dies das Problem mit dem iOS-Simulator ist ...

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])!")
    }
    
}

Antworten:


82

Wenn Sie den Wert von cell möchten, müssen Sie die Zelle in der Zelle nicht neu erstellen didSelectRowAtIndexPath

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    println(tasks[indexPath.row])
}

Aufgabe wäre wie folgt:

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

Außerdem müssen Sie überprüfen, ob cellForRowAtIndexPathSie eine Kennung festlegen müssen.

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

Ich hoffe es hilft.


42

In Swift 3.0

Sie können das Ereignis für das Berühren / Klicken der Zelle der Tabellenansicht über die Delegatmethode finden. Außerdem können Sie den Abschnitts- und Zeilenwert der Zelle wie folgt ermitteln.

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

15

Ein paar Dinge, die passieren müssen ...

  1. Der View Controller muss den Typ erweitern UITableViewDelegate

  2. Der View Controller muss die didSelectRowAtFunktion enthalten.

  3. Der Tabellenansicht muss der Ansichtscontroller als Delegat zugewiesen sein.


Im Folgenden finden Sie eine Stelle, an der die Zuweisung des Delegaten erfolgen kann (innerhalb des View Controllers).

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

Und eine einfache Implementierung der didSelectRowAtFunktion.

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

10

Das Problem wurde von mir mithilfe des Tutorials von weheartswift gelöst

Geben Sie hier die Bildbeschreibung ein


6
Behebt die ausgewählte Antwort das Problem tatsächlich? Wenn das Problem dadurch nicht behoben wird, schreiben Sie bitte eine Lösung auf Ihre Antwort oder wählen Sie die entsprechende Antwort aus, um die von Ihnen gestellte Frage zu beheben. Nur weil jemand Hilfe und eine mögliche Lösung anbietet, heißt das nicht, dass seine Antwort als die richtige ausgewählt werden sollte. Bitte beheben Sie dies.
Devbot10

7

Das hat gut für mich funktioniert:

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

Die Ausgabe sollte sein:

section: 0
row: 0

5
Ihre Antwort erscheint doppelt, da diese Antwort der obigen Antwort sehr ähnlich erscheint. Stackoverflow.com/a/41583381/40867
jdev

6

Erben Sie den Tableview-Delegaten und die Datenquelle. Implementieren Sie Delegierte, was Sie brauchen.

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

Und schließlich implementieren Sie diesen Delegaten

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

4

Um ein Element aus dem Array in der tableView-Zelle zu erhalten, berühren oder klicken Sie es schnell

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)")
}

3
 # Check delegate? first must be connected owner of view controller

    # Simple implementation of the didSelectRowAt function.

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
         print("row selection: \(indexPath.row)")
    }

2

Ich vermassle das jedes Mal! Stellen Sie einfach sicher, dass der tableViewDelegierte unddataSource in deklariert sind viewDidLoad. Dann fülle ich normalerweise ein paar Arrays, um zurückgegebene Daten zu simulieren, und nehme sie dann von dort!

//******** Populate Table with data ***********
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? SetupCellView
    cell?.ControllerLbl.text = ViewContHeading[indexPath.row]
    cell?.DetailLbl.text = ViewContDetail[indexPath.row]
    cell?.StartupImageImg.image = UIImage(named: ViewContImages[indexPath.row])
    return cell!
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.