回答編集履歴

2 修正

_Kentarou

_Kentarou score 8383

2016/07/21 21:48  投稿

タイマーは`ViewController`で一つ動かして、その度現在表示されているCellの配列を取得して、そのセル全て対して実装してあるラベルのアップデートメソッドを呼び出すとよいと思います。
---
参考になるか分かりませんが簡単なサンプルを作成しました。ダウンロードして試してみてください。
[teratail_41673](https://github.com/KentarouKanno/teratail_41673)
```swift
// ViewControllerのタイマーで呼ばれるメソッド
func updateCustomCellLabel(timer: NSTimer) {
   // 表示中のセル一覧を取得
   let visibleCells = tableView.visibleCells as! [CustomCell]
   for cell in visibleCells {
       // セルに対してラベルのアップデートメソッドを呼び出す
       cell.updateLabel()
   }
}
```
```
![s](c2b40ffcc8f814618bc4aaf1a2135f0d.png)
1 修正

_Kentarou

_Kentarou score 8383

2016/07/21 20:50  投稿

セルを表示するタイミングで`func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell`が呼ばれるのでそちらでセルにデータを設定する際に
ゴールとなる時間と現在時間を比較して差分をラベルに表示、同時にタイマーを回し1秒ごとにラベルを更新する。
タイマーは`ViewController`で一つ動かして、その度現在表示されているCellの配列を取得して、そのセル全て対して実装してあるラベルのアップデートメソッドを呼び出すとよいと思います。
上記のようにすると表示するときにズレがなく正確な動きになると思います。
---
解決策の一つとして参考にしてください。
参考になるか分かりませんが簡単なサンプルを作成しました。ダウンロードして試してみてください。
[teratail_41673](https://github.com/KentarouKanno/teratail_41673)
```swift
// ViewControllerのタイマーで呼ばれるメソッド
func updateCustomCellLabel(timer: NSTimer) {
   // 表示中のセル一覧を取得
   let visibleCells = tableView.visibleCells as! [CustomCell]
   for cell in visibleCells {
       // セルに対してラベルのアップデートメソッドを呼び出す
       cell.updateLabel()
   }
}
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る