tableView:didSelectRowAtIndexPath
が呼び出されたときに実行される各セルには、tableView
というタイマーがあります。私は、カスタムセル(CustomCell
)にラベル(cellName
)を使用して、タイマーを増加させようとしています。 に#selector
を使用して、getTimer()という別の関数を呼び出して値を増やしています。コードは以下の通りです。SwiftのTableViewセルに.scheduledTimerの変数を返す3
私は
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)
}
}
のみ関連情報を表示するには2つのこと、このコードは省略しました:getTimer()
はこれをインクリメントすることができるように、私のtime
変数はクラスレベルで定義されて
を毎回
.scheduledTimer
が更新されます。私は:didSelectRowAtIndexPath
に定義したいので、一度に複数のタイマーを走らせることができます。:didSelectRowAtIndexPath
にこれを定義する方法はありますか?getTimer()
からインクリメントを返すことで結果が得られるかもしれませんか?現在
cellName
をgetTimer
から返された文字列で更新しています。これは静的で、現在、.scheduledTimerがリフレッシュするときにリフレッシュできる方法を考えています。indexPath.row
をgetTimer
に渡してgetTimer()
関数自体で更新する必要がありますか?
この構文はうまくいかないでしょう。ターゲット/アクションメソッドから値を返すことは不可能です。解決策は、カスタムテーブルビューのセルクラスを作成し、そこにタイマーを配置することです。 – vadian
ええ、あなたはおそらく正しいでしょう - 私はいつも私がこの方法でわらで握っていたことを知っていました。私のカスタムセルクラスの実装は正常に動作するはずです。私は後世のためにそれを働かせたら、ここで答えとして結果を作ります。ありがとう。 – user3526037
質問を編集し、実際のコードを追加してください。 – vadian