zurückgeben Ich habe eine tableView
mit einem Timer in jeder Zelle, die ausgeführt wird, wenn tableView:didSelectRowAtIndexPath
aufgerufen wird. Ich versuche, ein Etikett (cellName
) in einer benutzerdefinierten Zelle (CustomCell
) zu verwenden, um den Timer inkrementieren anzuzeigen. Ich verwende #selector
in .scheduledTimer
, um eine separate Funktion namens getTimer() aufzurufen, um den Wert zu erhöhen. Code wie folgt.Variable für .scheduledTimer zu TableView Cell in Swift 3
Ich habe diesen Code abgekürzt nur die relevanten Informationen
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var time = 0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell: CustomCell = tableView.cellForRow(at: indexPath)! as!
CustomCell
var timer = Timer()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.getTimer), userInfo:nil, repeats: true)
cell.cellName.text = String(self.getTimer())
}
func getTimer() -> String {
time += 1
return String(time)
}
}
Zwei Dinge zu zeigen:
Meine
time
Variable wird auf der Ebene der Klassen definiert, so dassgetTimer()
diese erhöhen können auf jedem.scheduledTimer
aktualisieren. Ich möchte es in:didSelectRowAtIndexPath
definieren, so dass ich mehrere Timer gleichzeitig ausführen kann. Gibt es eine Möglichkeit, dies in:didSelectRowAtIndexPath
zu definieren, und vielleicht erhalten Sie das Ergebnis durch Zurückgeben der Schrittweite vongetTimer()
?Derzeit aktualisiere ich meine
cellName
mit einer Zeichenfolge, die vongetTimer
zurückgegeben wird. Dies ist statisch und denkt derzeit darüber nach, wie ich es aktualisieren kann, wenn .scheduledTimer aktualisiert wird. Sollte ich vielleichtindexPath.row
angetTimer
weitergeben und es in dergetTimer()
Funktion selbst aktualisieren?
Diese Syntax wird nie funktionieren. Es ist nicht möglich, einen Wert von einer Ziel-/Aktionsmethode zurückzugeben. Eine Lösung besteht darin, eine benutzerdefinierte Tabellenansichtszellenklasse zu erstellen und den Timer dort einzufügen. – vadian
Yeah, du hast wahrscheinlich Recht - ich wusste immer, dass ich auf diese Weise an Strohhalmen klammere. Die Implementierung in meiner benutzerdefinierten Zellklasse sollte funktionieren. Ich werde das Ergebnis als eine Antwort hier erstellen, sobald ich es für die Nachwelt ausarbeite. Vielen Dank. – user3526037
Bearbeiten Sie Ihre Frage und fügen Sie den tatsächlichen Code hinzu. – vadian