#知りたいこと
まず、何を知りたいかをご説明します。
といってもタイトルのとおりなのですが
違うファイルから違うファイルの配列に文字を加えたい です。
やり方を教えて下さい。
#具体的なやりたい動き
storyboardはこうなっています。
![
1つ目をFirstView、2つ目をSecondViewと呼ぶことにします。
具体的なやりたい動きを説明します。
1.写真には写っていないですが、FirstViewにはボタンが有り、それを押すことによってSecondViewに遷移します(segueはshowに設定してます)。
2.SecondViewにあるTextFieldに文字を入力し、CreateButtonを押す。
3.CreateButtonを押すことによってFirstViewに戻ると同時にTextFieldに入力された文字をTableViewに使う配列に加える。
4.FirstViewに戻るとTableViewCellができていて、先程TextFieldに入力した文字が代入されている。
こんな感じです。
#書いてみたコード
コメントを書いておいたのでそちらの方を見ていただけるとありがたいです。
FirstViewController
1import UIKit 2 3class ViewController: UIViewController { 4 5 // 下の3つの配列に代入したいです。 6 var titleList: [String] = [] 7 var detailList: [String] = [] 8 var dateList: [String] = [] 9 //ここまで 10 11 @IBOutlet weak var tableView: UITableView! 12 @IBOutlet weak var createButton: UIButton! 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 17 createButton.layer.cornerRadius = 37.5 18 view.addSubview(createButton) 19 20 navigationItem.title = "ToDo" 21 22 navigationSetUp() 23 24 tableView.delegate = self 25 tableView.dataSource = self 26 } 27 28 override func viewWillAppear(_ animated: Bool) { 29 tableView.reloadData() 30 } 31 32 private func navigationSetUp() { 33 navigationItem.largeTitleDisplayMode = .always 34 navigationController?.navigationBar.prefersLargeTitles = true 35 36 let appearance = UINavigationBarAppearance() 37 appearance.configureWithDefaultBackground() 38 appearance.backgroundColor = .systemTeal 39 appearance.titleTextAttributes = [.foregroundColor: UIColor.white] 40 appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white] 41 navigationController?.navigationBar.scrollEdgeAppearance = appearance 42 navigationController?.navigationBar.standardAppearance = appearance 43 44 navigationController?.navigationBar.tintColor = .white 45 } 46} 47 48extension ViewController: UITableViewDelegate, UITableViewDataSource { 49 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 50 return titleList.count 51 } 52 53 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 54 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 55 56 cell.textLabel?.text = titleList[indexPath.row] 57 cell.textLabel?.font = UIFont.systemFont(ofSize: 25) 58 59 cell.detailTextLabel?.text = "(dateList[indexPath.row])まで" 60 cell.detailTextLabel?.font = UIFont.systemFont(ofSize: 13) 61 cell.detailTextLabel?.textColor = .darkGray 62 63 return cell 64 } 65 66 67}
SecondViewController
1import UIKit 2 3class CreateViewController: UIViewController { 4 5 @IBOutlet weak var titleTextField: UITextField! 6 @IBOutlet weak var detailTextField: UITextField! 7 @IBOutlet weak var datePicker: UIDatePicker! 8 @IBOutlet weak var createButton: UIButton! 9 10 // CreateButtonを押したときのAction 11 @IBAction func createButtonAction(_ sender: Any) { 12 //ここでFirstViewを扱えるようにしてappendしてみましたがTableViewに描画されません。 13 let vc = storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController 14 15 vc.titleList.append(titleTextField.text!) 16 vc.detailList.append(detailTextField.text!) 17 18 let formatter = DateFormatter() 19 formatter.locale = Locale(identifier: "ja_JP") 20 formatter.timeZone = TimeZone(identifier: "Asia/Tokyo") 21 formatter.dateFormat = "y/M/d H:m" 22 23 let dateStr = formatter.string(from: datePicker.date) 24 vc.dateList.append(dateStr) 25 26 navigationController?.popViewController(animated: true) 27 } 28 //ここまで 29 30 override func viewDidLoad() { 31 super.viewDidLoad() 32 33 createButton.isEnabled = false 34 createButton.alpha = 0.7 35 createButton.layer.cornerRadius = 30 36 37 navigationItem.title = "Create" 38 39 titleTextField.delegate = self 40 detailTextField.delegate = self 41 42 NotificationCenter.default.addObserver(self, selector: #selector(showKeyboard), name: UIResponder.keyboardWillShowNotification 43 , object: nil) 44 NotificationCenter.default.addObserver(self, selector: #selector(hideKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil) 45 } 46 47 @objc func showKeyboard(notification: Notification) { 48 let keyboardFrame = (notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as AnyObject).cgRectValue 49 50 guard let keyboardMinY = keyboardFrame?.minY else { return } 51 let ButtonMinY = createButton.frame.minY 52 let distance = ButtonMinY - keyboardMinY - 50 53 54 let transform = CGAffineTransform(translationX: 0, y: -distance) 55 56 UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [], animations: { 57 self.view.transform = transform 58 }) 59 } 60 61 @objc func hideKeyboard() { 62 UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [], animations: { 63 self.view.transform = .identity 64 }) 65 } 66 67 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 68 self.view.endEditing(true) 69 } 70} 71 72extension CreateViewController: UITextFieldDelegate { 73 func textFieldDidChangeSelection(_ textField: UITextField) { 74 let titleTextFieldIsEmpty = titleTextField.text?.isEmpty ?? true 75 let detailTextFieldIsEmpty = detailTextField.text?.isEmpty ?? true 76 77 if titleTextFieldIsEmpty || detailTextFieldIsEmpty { 78 createButton.isEnabled = false 79 createButton.alpha = 0.7 80 } else { 81 createButton.isEnabled = true 82 createButton.alpha = 1 83 } 84 } 85}
回答1件
あなたの回答
tips
プレビュー