前提・実現したいこと
Swift歴 約1ヶ月の初心者です。
ストップウォッチのラップタイムの様に、過去の時間がセットされたtableview cellがあり、タップするとDate Pickerが現れて、そのセルのデータが書き換えられる様にしたいです。
Date Pickerと完了ボタンを表示しており、完了ボタンを押した時にセットされているDate Pickerの値で、元のデータを更新したいです。
発生している問題・エラーメッセージ
完了ボタンを押した時にDate Pickerや完了ボタンを消すことは何とかできましたが、そのタイミングで値を取り出すことができません。
どの様なコードを書けば実現可能か、ご教示頂けると助かります。
該当のソースコード
Swift4
1 //セルをタップするとDatePickerを呼び出す 2 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 3 4 tableView.deselectRow(at: indexPath as IndexPath, animated: true) 5 6 //元のデータは、2次元配列に過去時間を入れてある 7 let beforeChangeDate:String! = self.thingsList[self.pathNumber!][indexPath.row + 1] 8 9 let datePicker: UIDatePicker = UIDatePicker() 10 11 //日時データのフォーマット設定 12 let dateFormatter = DateFormatter() 13 dateFormatter.locale = Locale(identifier: "ja_JP") 14 dateFormatter.dateStyle = .long 15 dateFormatter.timeStyle = .medium 16 dateFormatter.dateFormat = "yyyy年M月d日 H時mm分ss秒" 17 let beforeChangeDateTypeDate = dateFormatter.date(from: (beforeChangeDate)) 18 19 // ピッカー設定 20 datePicker.datePickerMode = UIDatePickerMode.date 21 datePicker.locale = Locale(identifier: "ja_JP") 22 datePicker.frame = CGRect(x:0, y:(self.view.frame.height / 1 - 240), width:self.view.frame.width, height:240) 23 datePicker.backgroundColor = UIColor.white 24 datePicker.tag = 2 25 26 // ピッカー初期値に元データを代入 27 if let beforeChangeDateTypeDate = beforeChangeDateTypeDate { 28 datePicker.date = beforeChangeDateTypeDate 29 } 30 31 // ピッカーの表示 32 view.addSubview(datePicker) 33 34 // 完了ボタンのツールバー設定 35 let toolbar = UIToolbar(frame: CGRect(x: 0, y: (self.view.frame.height / 1 - 240 ), width: view.frame.size.width, height: 35)) 36 let spacelItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 37 let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector (doneButton)) 38 toolbar.setItems([spacelItem, doneItem], animated: true) 39 toolbar.tag = 2 40 41 // ツールバーの表示 42 view.addSubview(toolbar) 43 44 45 //ここの部分(元データの更新処理)を完了ボタンが押された時に動作させたい 46 // @objc funcの中に移動させてもdatePickerの値やindexPath.rowの値が引き継がれない 47 let pickerDate = datePicker.date 48 let strPickerDate = "(dateFormatter.string(from:pickerDate))" 49 50 self.thingsList[self.pathNumber!][indexPath.row + 1] = strPickerDate 51 52 tableView.reloadData() 53 //ここまで 54 55 } 56 57 // 完了ボタン押下 (ここの処理ももっと良い書き方があるのかと思いますが、、) 58 @objc func doneButton(parentView:UIView,sender:UIBarButtonItem) { 59 //ピッカーを消す 60 let delview = self.view.viewWithTag(2) 61 delview?.removeFromSuperview() 62 //ツールバーを消す 63 let delview2 = self.view.viewWithTag(2) 64 delview2?.removeFromSuperview() 65 } 66 67
試したこと
@objc funcの中に元データの更新処理部分を移動させてもdatePickerの値やindexPath.rowの値の取得の仕方がわからず、詰まってしまいました。
補足情報(FW/ツールのバージョンなど)
xcode9.4.1 , swift4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/09 00:30 編集
2018/07/09 14:03 編集
2018/07/09 23:55