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!") } }
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.
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)")
}
Ein paar Dinge, die passieren müssen ...
Der View Controller muss den Typ UITableViewDelegate
erweitern.
Der View Controller muss die Funktion didSelectRowAt
enthalten.
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)")
}
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
Das Problem wurde von mir mithilfe des Tutorials von weheartswift gelöst.
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)")
}
# 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)")
}
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)")
}
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!
}