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

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回答

207閲覧

二つの変数を結びつける方法

退会済みユーザー

退会済みユーザー

総合スコア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/27 15:40

編集2018/05/27 17:15

swift

1import UIKit 2 3class topViewController: ViewController { 4 5 @IBOutlet var titlelbl: UILabel? 6 7 // ClassMethodクラスを定義 8 class ClassMethod { 9 } 10 // メタタイプを取得 11 let type = ClassMethod.self 12 // 型名の文字列を生成 13 let typeString = String(describing: ClassMethod()) 14 15 16 @IBAction func StartButton(_ sender: Any) { 17 let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .alert) 18 19 let okAction = UIAlertAction(title: "OK", style: .default, handler: { 20 (action:UIAlertAction!) -> Void in 21 22 if let textFields = alert.textFields { 23 24 for textField in textFields { 25 if let text = textField.text { 26 print(textField.text!) 27 //self.cellData.append(CellData(text)) 28 29 self.navigationItem.title = text 30 //遅延に関するコード 31 DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { 32 // your code here 33 self.performSegue(withIdentifier: "ViewControllersegue", sender: nil) 34 } 35 } 36 } 37 } 38 }) 39 alert.addAction(okAction) 40 41 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 42 alert.addAction(cancelAction) 43 44 alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in 45 textField.placeholder = "テキスト" 46 }) 47 alert.view.setNeedsLayout() // シミュレータの種類によっては、これがないと警告が発生 48 // アラートを画面に表示 49 self.present(alert, animated: true, completion: nil) 50 51 } 52 53override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 54 if segue.identifier == "ViewControllersegue" { 55 let nextView: ViewController = segue.destination as! ViewController 56 57 nextView.titleName = typeString 58 } 59 } 60

やりたい事

ClassMethodlet typeStringif let textFields = alert.textFields {
に結びつけたい

何故やるのか
アラートで入力したものを遷移先のviewcontrollerのtitleで表示させるため

////
出来ている事
ちゃんと遷移先で意図した表示をされるのかを確かめる為var itme = "name"にして実行し、遷移先のtitleが変わっているまでは確認できた。
その為、変数をlet textFieldsに結びつける事が出来れば意図した意図した事ができると思われる。

追記 navigationItemのボタンの名前について

遷移先でボタンの名前も変わっていましたので以下のようにしたところ、ボタンの固定できるようになりました。
let backButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButtonItem

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

performSegueの引数(sender)に渡してあげるのが簡単ですね。

swift

1// セグエにtextを渡す 2DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { 3 self.performSegue(withIdentifier: "ViewControllersegue", sender: text) 4}

swift

1// senderに来たtextをStringにキャストして渡す 2override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 3 if segue.identifier == "ViewControllersegue", 4 let nextView: ViewController = segue.destination as? ViewController, 5 let text = sender as? String { 6 7 nextView.titleName = text 8 } 9}

回答追記

遷移前画面のNavigation ItemBack Buttonを設定してください。

投稿2018/05/27 15:51

編集2018/05/27 16:21
_Kentarou

総合スコア8490

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

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

退会済みユーザー

退会済みユーザー

2018/05/27 16:11

ありがとうございます。解決しました。 しかし、現状のコードですと,遷移先のtitleの他に戻る時のボタン、他の画面のtitleにも対しても、アラートの入力した中身が反映されているのですが遷移先viewのtitleだけ入力したものを反映させたい時はどのようにすればいいのでしょうか?
_Kentarou

2018/05/27 16:23

回答に追記しました。 聞いたらすぐに分かりますが、自分でも調べて分からなければ聞く癖を付けたほうが良いと思いますよ。
退会済みユーザー

退会済みユーザー

2018/05/27 17:03 編集

分かりました。これからは調べてから質問するようにします。 質問に追記しましたがボタンについてbackBarButtonItemの処理をコーディングしたことにより改善出来ました。 そして、今、navigationItemのtitleの名前をviewcontrollerだけ表示されるようにしようとしているので、qita等でそれに関する記事を探してみましたが見当たりませんでした。その為、何かアドバイスを頂けないでしょうか? 浅はかな考えですがself.ViewController.title = self.titleNameにしてみましたが案の定has no memberエラーで出来ませんでした。
_Kentarou

2018/05/27 17:13

やりたいことが見えてませんが、ViewControllerを継承した画面でも同じメソッドでタイトルを取得したいという感じですか?
退会済みユーザー

退会済みユーザー

2018/05/27 17:25

説明不足ですいませんでした。説明しやすくするためにスクショを追記しました。 今回行いたい事としてはアプリを立ち上げた時のスタート画面であるDiary Note Bookのstartボタンをタップした時にviewcontrollerに遷移していきます。その際に遷移先のviewのtitleを指定したいと思い遷移する前にアラートを呼び出して入力出来るように実装しました。 そして遷移した時に遷移先のviewだけtitleをつけたいと考え、今回の質問に至りました。 しかしながら、現状のコードですと遷移先のviewだけでなく、スタート画面のviewまでtitleがついてしまっているのでそれを無くしたく@_Kentarouさんに質問しました。
_Kentarou

2018/05/27 17:28

????で自分のタイトルを設定してますが、、、 self.navigationItem.title = text
退会済みユーザー

退会済みユーザー

2018/05/27 17:38

self.navigationItem.title = text 上記のコードは遷移先のviewだけに適用するつもりでコードを書きましたがこれによってDiary Note Bookのviewまでtitle名が変わってしまうんですね。その場合、if文(どう条件分岐すればいいか分からないが)で条件分岐をし、遷移先のviewだけ反映させるようなコードにすれば私が意図した操作に出来ますか?
_Kentarou

2018/05/27 17:45 編集

遷移先のタイトルは回答のコードで渡せていると思うので、self.navigationItem.title = text は消せばよいのでは?
退会済みユーザー

退会済みユーザー

2018/05/27 17:50

解決できました。てっきり、遷移先に渡すために必要なコードだと考えていましたので、何も疑問を感じず残していました。 夜遅い中、何度も聞き返してしまい誠に申し訳ありませんでした。以後、よく調べ、コードを見返すように気をつけます。 ご迷惑お掛けして本当にすいませんでした。
_Kentarou

2018/05/27 17:53

結構寝て起きたらサクッと分かるパターンもあるので、寝るのもひとつの手です。 お疲れ様です。
退会済みユーザー

退会済みユーザー

2018/06/01 16:56

@_Kentarouさん 以前修正して頂いたリポジトリに今、データ保存機能を導入したくRealmを利用してデータ保存をしようと考え、Qiitaやrealmの公式ドキュメントを参考にして試してみたのですがその際にCellDataクラスの部分でObjectのクラスにvar list = List<CellData>()こうして見たのですがエラーが出ていましました。いろいろ調べてみるとstring型の場合ですとObjectクラスには入れれないと言うことがわかったのですがそうすともうどのようにコーディングしていけば良いか分からなく困っています。 お忙しいと思いますが、もし時間がありましたらまたリポジトリにあげましたので見て頂けないでしょうか? やりたい事としては、日記アプリみたいなものをイメージしているのでホーム画面のアラーたで入力したものは遷移すると同時にデータベースとなるviewのセルに自動的にタイトルが反映されるようにし、なおかつ、HistoryViewControllerのtableViewにもボタンをタップした時の日付とその際に入力したものをtabelViewに反映させ、その後振り返りたいときにデータベースのtebleviewからアクセスして入力したものを振り返れる事もイメージしています。 https://github.com/haruka22/project 今回は私なりに一所懸命調べた上でどうしてもエラー箇所を解決出来ませんでしたのでお伺いしました。 そのため、何かアドバイスやご指導をして頂けると幸いです。よろしくお願いします。
_Kentarou

2018/06/02 00:23

見ましたが、プロジェクトファイルもなくてXcodeで開くことすらできません。
退会済みユーザー

退会済みユーザー

2018/06/03 21:21

返信遅くなりすいません。申し訳ありませんでした。私の手違いでした。 https://github.com/haruka22/22 こちらに再度アップしました。 realmを利用した事によりPodsファイルがファイルが多すぎてアップ出来ないと警告が表示されPodsファイルはアップすることが出来ませんした。 見ていただけると幸いです。 私なりにrealmを使い、まずはデータを保存させようと試みましたがコードにはエラーがなく実行すると落ちてしまいます。 原因を色々ここ数日間探って見ました分かりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問