2017-08-05 9 views
1

タイマーを設定して、tableViewCell内のラベルに時間を設定しようとしています。タイマーを使用してUITableViewCellのUILabelで時刻を設定する

知識が不足しているため、この問題に直面しています。

私はTimerについてよく知っていますが、私はこれに対して最も効率的な方法を見つけ出すことができます。

おかげでたくさんここ

は私のコードここ

import UIKit 



class WeatherCellLocationCell: UITableViewCell { 

    @IBOutlet weak var localTime: UILabel! 
    @IBOutlet weak var cityName: UILabel! 
    @IBOutlet weak var currentTemp: UILabel! 

    func configureCell(weatherPlace : WeatherPlaceData){ 

     localTime.text = DateFormatter.localizedString(from: weatherPlace.localDate, dateStyle: .none, timeStyle: .short) 

     cityName.text = weatherPlace.name 
     let temp = Int(weatherPlace.currentTemp) 
     currentTemp.text = "\(temp)" 

    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 


    } 

    override func setSelected(_ selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

    } 

} 

私は

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 


      let cell = tableView.dequeueReusableCell(withIdentifier: "WeatherCellLocation", for: indexPath) as! WeatherCellLocationCell 

      let place = fetchedResultsController.object(at: indexPath) 
     // var timer = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(updateTime), userInfo: indexPath, repeats: true) 
      cell.configureCell(weatherPlace: place) 

      return cell 

    } 

答えて

0

まず、あなたのセルにWeatherPlaceDataオブジェクトを追加し、セルにタイマーを置くのtableViewをロードしていますです

var currentWeatherPlaceData: WeatherPlaceData? 
fileprivate var timeWorking : Bool = false 
var timer:Timer? 

この1

func configureCell(weatherPlace : WeatherPlaceData){ 
     self.currentWeatherPlaceData = weatherPlace 
     if(!timeWorking) 
     { 
     localTime.text = DateFormatter.localizedString(from: self.currentWeatherPlaceData.localDate, dateStyle: .none, timeStyle: .short) 
     timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.updateTime), userInfo: nil, repeats: true) 
     self.timeWorking = true 
     } 

     cityName.text = weatherPlace.name 
     let temp = Int(weatherPlace.currentTemp) 
     currentTemp.text = "\(temp)" 

    } 

にごconfigureCell方法を変更し、最終的にあなたのタイマー

override func prepareForReuse() { 
    super.prepareForReuse() 
    self.timer.invalidate() 
    self.timeWorking = false 
} 
を再起動し、問題を回避するために、再利用のために準備を調整

あなたのラベル

func updateTime() 
    { 
     localTime.text = DateFormatter.localizedString(from: self.currentWeatherPlaceData.localDate, dateStyle: .none, timeStyle: .short) 
    } 
を更新するためのメソッドを追加します

希望があれば

+0

こんにちはReinier。あなたはconfigureCellの中にcurrentWeatherPlaceData = weatherPlaceを書きませんか?はい、私はそれを試みたが、私はまだ私のラベルは時間を表示していないが、私はAPIから取得している時間です。 –

+0

早急な返信に心から感謝しています。しかし、まだ同じ結果を得ている。タイマーは動作していません –

+0

@PS自分のself.currentWeatherPlaceData.localDateに何を持っていて、何を表示する必要がありますか?カウントダウン?、説明してください、あなたが表示しようとしている問題は、あなたがタイマーを表示しても、常に同じものが表示されます –

0

毎秒時間を再計算するセル自体にタイマーを追加します。

class WeatherCellLocationCell: UITableViewCell { 

@IBOutlet weak var localTime: UILabel! 
@IBOutlet weak var cityName: UILabel! 
@IBOutlet weak var currentTemp: UILabel! 

var timer: Timer? 
var weatherPlace: WeatherPlaceData? 

func configureCell(weatherPlace : WeatherPlaceData){ 
    self.weatherPlace = weatherPlace 
    setTime() 
    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(WeatherCellLocationCell.setTime), userInfo: nil, repeats: true) 
} 

func setTime() { 
    localTime.text = DateFormatter.localizedString(from: weatherPlace.localDate, dateStyle: .none, timeStyle: .short) 

    cityName.text = weatherPlace.name 
    let temp = Int(weatherPlace.currentTemp) 
    currentTemp.text = "\(temp)" 
} 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 

override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
} 

override func prepareForReuse() { 
    if timer != nil { 
     timer?.invalidate() 
     timer = nil 
    } 
} 

}

+0

こんにちは。返信いただきありがとうございます。私はあなたのコードを試して、私は以前と同じ結果を得ています。ラベルは時間を表すのではなく、APIの結果日付の静的ラベルです。 –

関連する問題