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

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

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

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

Xcode

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

Swift

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

Q&A

解決済

1回答

1470閲覧

少し複雑な画面遷移について

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/05/28 09:13

編集2018/05/29 10:28

やりたいこと

コードでの画面遷移を実現したい。(少し複雑な)
ホーム画面で入力したしたデータを他のsceneに渡したい。

出来ていること
入力したデータは他のscnenには渡せている。
基本的な画面遷移は出来ている。

困っていること
他のsceneに渡したデータをtableViewに反映されない。
下記の2.[History]ボタンからの遷移がうまく出来ずに困っている。(tableviewにデータを渡せれてないのが原因だと思われる。)

  • 1.ホーム画面scene
  • 2.内容scene
  • 3.内容を管理するscene

 0. [start]ボタン 1 → 2
0. [History]ボタン 1 → 3 → 2

コード等は下記のリポジトリにあげています。
https://github.com/haruka22/project

追記

遷移先のtableViewにデータが反映されない

HistoryViewController.swift

1import UIKit 2 3class HistoryViewController: UIViewController,UITableViewDelegate,UITableViewDataSource{ 4 5 @IBOutlet weak var HistorytableView: UITableView! 6 7 8 var datetime = UILabel()//var datetime: UILabel! /オプショナル型はなるべく使わない 9 var nameitem = UILabel() 10 11 12 13 // ボタンを用意 14 var addBtn: UIBarButtonItem! 15 16 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 17 return 0 18 } 19 20 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 21 let cell = tableView.dequeueReusableCell(withIdentifier: "cell2", for: indexPath) 22 cell.textLabel?.text = datetime.text 23 24 return cell 25 } 26 27 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 28 //セルの選択解除 29 tableView.deselectRow(at: indexPath, animated: true) 30 31 //ここに遷移処理を書く 32 self.present(ViewController(), animated: true, completion: nil) 33 } 34 35 36 37 override func viewDidLoad() { 38 super.viewDidLoad() 39 40 HistorytableView.delegate = self 41 HistorytableView.dataSource = self 42 HistorytableView.backgroundColor = UIColor.lightGray 43 self.navigationItem.title = "データベース" 44 HistorytableView.reloadData() 45 } 46 47 func onClick() { 48 print("ボタンがおされました") 49 let second = ViewController() 50 present(second, animated: true, completion: nil) 51 52 } 53 54}

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

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

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

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

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

guest

回答1

0

ベストアンサー

GitHubに上がっているコードは部分的(xcodeprojがない)ので、
全体像(遷移)についてはよくわかりませんが、
上の記載されているコードでおかしい箇所があります。

View間でデータを渡すには、
①直接渡す
②間にデータを保存するクラス(自作 or CoreData or Realm等)を介在させる
の2パターンになります。

おそらく、これまでの質問歴から①の方法を取っていると思います。
しかし、①での渡し方では上記のコードのようにUILabelにデータを直接は渡せません。
UILabelは表示する文字列自体を表してます。
一旦、var receivedWord:String = "" のように変数の文字列を用意して、
そこに投げ込んで、cell.textLabel.text = receivedWord としないといけないです。

と、ここまで書きましたが、haruka-tさんがおそらくやりたいことはこの方法では達成できません。
なぜなら、その場で値を渡してるだけで、表示はできてもデータはどこにも保存されてないので、
再度アプリを立ち上げた時見直したり、新たにデータを蓄積することはできないからです。

間に介在する②の方法を利用すべきだと思います。
自分はRealmを使ってるので、下記を紹介させていただきます。
https://qiita.com/TsukasaHasegawa/items/4dfaa87add7b6866f858
http://programming-beginner-memo.com/?p=16

投稿2018/05/29 21:30

hameji

総合スコア1380

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

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

退会済みユーザー

退会済みユーザー

2018/05/30 19:51

ありがとうございます。なんとなくイメージ出来ました。試して見ます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問