質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1053閲覧

[Swift] 違うファイルから違うファイルの配列に文字を加えたい

退会済みユーザー

退会済みユーザー

総合スコア0

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/11/07 09:16

#知りたいこと
まず、何を知りたいかをご説明します。
といってもタイトルのとおりなのですが

違うファイルから違うファイルの配列に文字を加えたい です。

やり方を教えて下さい。

#具体的なやりたい動き
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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/11/07 10:03

FirstView に文字を追加するメソッドを用意して、delegate を使って SecondView から呼び出すのが一般的かと。 ちなみに、タイトルですが、「違うファイルから違うファイルの配列に文字を加えたい」だと複数のデータファイルの内容をマージしたいというように読めるので、「別の画面に情報を受け渡したい」とかの方が良い気がします。
退会済みユーザー

退会済みユーザー

2021/11/07 10:17

回答ありがとうございます! 文字を追加するメソッドというのは具体的にどのようなものですか? ご指摘ありがとうございます! 以後気をつけます。
退会済みユーザー

退会済みユーザー

2021/11/09 08:55

色々と調べてやってみたらできました! ヒントを頂きありがとうございます!
guest

回答1

0

ベストアンサー

protocolとdelegateを使うことによってできました!
こちらのサイトを参考にしました↓
https://rara-world.com/swift-protocol-delegate/

投稿2021/11/09 08:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問