webentwicklung-frage-antwort-db.com.de

Wie Sie eine tableView-Zelle erkennen, die schnell berührt oder angeklickt wurde

Ich versuche, index des ausgewählten Elements in TableView abzurufen und danach einige Aktivitäten zu starten. Leider sind die meisten Lösungen, die ich gefunden habe, in Objective-C oder funktionieren nicht.

Die Methode func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) druckt das Etikett cell nicht.

Kann mir bitte jemand helfen?

 import UIKit 
 import ResearchKit 

 Klasse TaskListViewController: UIViewController, UITableViewDataSource {

 lassen Sie Aufgaben = [("Kurzer Spaziergang"), 
 ("Audiometrie"), 
 ("Finger tappen"), 
 ("Reaktionszeit"),
 ("Spatial Span Memory") 
 ] 


 // Wie viele Abschnitte befinden sich in Ihrer Tabelle 
 func numberOfSectionsInTableView (tableView: UITableView) -> Int {
 return 1 
 } 

 // gibt int wie viele Zeilen zurück 
 func tableView (tableView: UITableView, numberOfRowsInSection-Abschnitt: Int) -> Int {
 Rückgabe von Aufgaben.Anzahl 
 } 

 // Was ist der Inhalt 

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

 var (testName) = Aufgaben [indexPath.row] 
 cell.textLabel? .text = Testname 
 Zelle zurückgeben 
 } 

 // Jedem Tabellenabschnitt einen Namen geben 

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

 Rückgabe "Aufgaben" 

 } 

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

 let indexPath = tableView.indexPathForSelectedRow (); 

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

 println (currentCell.textLabel! .text) 
 } 


 Überschreiben Sie func viewDidLoad () {
 super.viewDidLoad () 

 } 
} 

Nach ein paar Versuchen änderte ich den Code in einen anderen als das gefundene Tutorial. Und es funktioniert auch nicht. Jetzt denke ich, das ist das Problem mit dem iOS-Simulator ...

 import UIKit 
 import ResearchKit 

 Klasse TaskListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

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

 Überschreiben Sie func viewDidLoad () {
 super.viewDidLoad () 

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


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

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

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

 Zelle zurückgeben 
 } 

 func tableView (tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
 println ("Sie haben die Zelle #\(items [indexPath.row]) ausgewählt!") 
 } 

} 

44
pawisoon

Wenn Sie den Wert aus der Zelle haben möchten, müssen Sie die Zelle in der Variablen didSelectRowAtIndexPath nicht neu erstellen.

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 die cellForRowAtIndexPath überprüfen, die Sie für den Identifier 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.

47
Ashish Kakkad

In Swift 3.0

Sie finden das Ereignis für das Berühren/Klicken der Zelle von tableview über die Delegatmethode. Ebenso kann der Abschnitts- und Zeilenwert der Zelle so ermittelt werden.

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

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

  1. Der View Controller muss den Typ UITableViewDelegate erweitern.

  2. Der View Controller muss die Funktion didSelectRowAt enthalten.

  3. Der Tabellensicht muss der View-Controller als Delegat zugewiesen sein.


Nachfolgend finden Sie eine Stelle, an der die Zuweisung des Delegierten (innerhalb des View-Controllers) stattfinden könnte.

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

Und eine einfache Implementierung der didSelectRowAt-Funktion.

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

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
Mr Duck

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

 enter image description here

4
pawisoon

Erben Sie den Delegierten für die Tabellenansicht und die Datenquelle.

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

Und schließlich implementieren Sie diesen Delegierten

     func tableView(_ tableView: UITableView, didSelectRowAt  
     indexPath: IndexPath) {
     print("row selected : \(indexPath.row)")
  }
3
Pankaj Jangid
 # 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
Prabhat Pandey

Um Elemente von Array in der tableView-Zelle zu erhalten, die in Swift berührt oder angeklickt werden

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)")
}
2
Sanjay Mali

Ich vermassle das jedes Mal! Stellen Sie sicher, dass der tableView-Delegat und die dataSource in viewDidLoad deklariert sind. Dann fülle ich normalerweise ein paar Arrays auf, um zurückgegebene Daten zu simulieren und nehme sie von dort aus!

//******** 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!
}
0
Lexter