###前提・実現したいこと
TableViewのcell.contentView.addSubview()でaddした値の変更を
TableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)
などで更新せずに変更する方法がわかりません。
具体的には、デイトピッカーで選択された値をTableViewのcell.contentView.addSubview(label)
でaddされたlabel
に表示したいです。Cellの更新をかけてしまうと不自然な動作になってしまったので、避けたいです。
よろしくお願いします。
###該当のソースコード
Swift
1 2// TableViewDataSourceClass 3 4// indexPath [0 , 0]がDatePickerがあるCellです。 5 6 // 各行に表示するセルを返す 7 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 8 let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell") 9 cell.textLabel?.text = cellTxtList[indexPath.section][indexPath.row] 10 11 // TextField作成 ===========================================================================↓ 12 mainTxtField = UITextField(frame: CGRect(x: 80, y: 25, width: screen - 170, height: 20)) 13 mainTxtField.text = data[indexPath.section][indexPath.row] 14 mainTxtField.textAlignment = NSTextAlignment.center 15 mainTxtField.tintColor = UIColor.blue 16 mainTxtField.tag = indexPath.row 17 // TextField作成 ===========================================================================↑ 18 19 if indexPath == [0 , 0] { 20 // デイトピッカーと関連付け 21 mainTxtField.inputView = myDatePicker 22 mainTxtField.isHidden = true 23 // デイトピッカーの値表示Label作成 ===========================================================================↓ 24 label = UILabel(frame: CGRect(x: 80, y: 25, width: screen - 170, height: 20)) 25 label?.text = TicketsData[indexPath.section][indexPath.row] 26 label?.textAlignment = NSTextAlignment.center 27 label?.tag = indexPath.row 28 cell.contentView.addSubview(Label!) 29 // デイトピッカーの値表示Label作成 ===========================================================================↑ 30 } 31 // else {} 32 33 return cell 34 }
Swift
1 2// DatePickerClass 3 4// デイトピッカーの記述 =======================================================↓ 5 // DatePickerの値が変更された際に呼ばれる. 6 internal func onDidChangeDate(sender: UIDatePicker){ 7 // フォーマットを生成. 8 let myDateFormatter: DateFormatter = DateFormatter() 9 myDateFormatter.dateFormat = "yyyy年MM月dd日" 10 // 日付をフォーマットに則って取得(データ) 11 let mySelectedDate: NSString = myDateFormatter.string(from: sender.date) as NSString 12 13 14 // Cell.textの値は変更し、表示できた。 15 // この要領でlabel.textを変更し、表示したいです。 16 TableView.cellForRow(at: [0 , 0])?.textLabel?.text = mySelectedDate as String 17 18 // リロードはデイトピッカが閉じてしまうので避けたいです。 19 // dispTableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .automatic) 20 21 } 22 // デイトピッカーの記述 =======================================================↑ 23 24
###試したこと
// cell.textの値は変更し、表示できました。
TableView.cellForRow(at: [0 , 0])?.textLabel?.text = mySelectedDate as String
自分で作ったlabel
を参照し、値を変更する方法がわかりません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。