2017-09-03 7 views
0

ラベルを含む1つのセルと別のUIDatePickerで静的なテーブルビューを構築しています。日付ピッカーの日付でラベルを更新したいが、ラベルのテキストは更新されません。誰かが私を正しい方向に向けることができますか?あなたが最初のセルを再ロードするために、テーブルビューを指示する必要があり、あなたのdatePickerChanged方法の終わりにupdate UILate from tableview

class HomeController: UIViewController { 

    let tableView: UITableView = UITableView() 

    private var showDatePicker: Bool = false 

    var dateLabel = "Select date" 
    var datePicker = UIDatePicker() 



extension HomeController: UITableViewDelegate, UITableViewDataSource { 

    @objc func datePickerChanged(sender: UIDatePicker) { 
     let formatter: DateFormatter = DateFormatter() 
     formatter.dateStyle = .medium 
     formatter.timeStyle = .short 

     let selectedDate = formatter.string(from: sender.date) 
     dateLabel = selectedDate 
     print("The selected date is: \(selectedDate)") 
    } 



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

     switch indexPath.row { 
     case 0: 
      let dateCell = tableView.dequeueReusableCell(withIdentifier: dateId, for: indexPath) as! DateCell 
      dateCell.homeController = self 
      dateCell.dateTextLabel.text = dateLabel 
      return dateCell 

     case 1: 
      let datePickerCell = tableView.dequeueReusableCell(withIdentifier: datePickerId, for: indexPath) as! DatePickerCell 
      datePickerCell.homeController = self 

      datePicker = datePickerCell.datePicker 
      datePicker.addTarget(self, action: #selector(datePickerChanged(sender:)), for: .valueChanged) 
      return datePickerCell 
    } 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     if indexPath.row == 0 { 
      toggleShowDatePicker(tableView) 
      datePickerChanged(sender: datePicker) 
     } 
     tableView.deselectRow(at: indexPath as IndexPath, animated: true) 
    } 

    private func toggleShowDatePicker(_ tableView: UITableView) { 
     showDatePicker = !showDatePicker 
     tableView.beginUpdates() 
     tableView.endUpdates() 
    } 
+0

'tableView.reloadData()'を試したことがありますか? – krlb

答えて

0

私のコードは、これまでのところ、このようになります。

tableView.reloadData()でテーブルビュー全体をリロードすることはできますが、1つのセルをリロードするだけで済みます。次の行であることを実行します。

tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .fade) 

ことはあなたのdatePickerChanged方法の最後の行ことを確認してください。

+0

ありがとう!!それは私がDidSelectRowAtメソッドに入れたときに機能しました。 – Niklas

0

ラベル値を更新した後、テーブルビューを再読み込みする必要があります。このメソッドを置き換えてください。

@objc func datePickerChanged(sender: UIDatePicker) { 
    let formatter: DateFormatter = DateFormatter() 
    formatter.dateStyle = .medium 
    formatter.timeStyle = .short 

    let selectedDate = formatter.string(from: sender.date) 
    dateLabel = selectedDate 
    tableView.reloadData() 
    print("The selected date is: \(selectedDate)") 
} 
関連する問題