やりたい事
topViewControllerのSTARTボタンをタップした時にViewControllerに遷移する。
また、遷移する際にalertを呼び出し、入力した内容が遷移先のnavigationItemのtitleに反映させたい。
困っている事
segueで結ばれているのにalertを呼びだす実装をすると画面遷移が出来なくった。
また、遷移先のtitleに反映されるようにコーディングをしてみたが合ってるかどうか分からない状態です。
この状態ではエラー自体がないので実行できるがstartボタンを押すと落ちてしまう。(signal sigbrt)
swift
1import UIKit 2 3class topViewController: ViewController { 4 5 @IBOutlet var titlelbl: UILabel? 6 7 //ここではViewControllerに飛ぶ遷移についてと遷移先のnavigationbarのtitleの変更について 8 @IBAction func StartButton(_ sender: Any) { 9 // テキストフィールド付きアラート表示 10 let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .alert) 11 // OKボタンの設定 12 let okAction = UIAlertAction(title: "OK", style: .default, handler: { 13 (action:UIAlertAction!) -> Void in 14 // OKを押した時入力されていたテキストを表示 15 if let textFields = alert.textFields { 16 // アラートに含まれるすべてのテキストフィールドを調べる 17 for textField in textFields { 18 print(textField.text!) 19 let name = textField.text! 20 //self.ViewController.title(name) 21 self.navigationItem.title = name 22 23 } 24 } 25 }) 26 alert.addAction(okAction) 27 // キャンセルボタンの設定 28 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 29 alert.addAction(cancelAction) 30 // テキストフィールドを追加 31 alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in 32 textField.placeholder = "テキスト" 33 }) 34 // 複数追加したいならその数だけ書く 35 // alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in 36 // textField.placeholder = "テキスト" 37 // }) 38 alert.view.setNeedsLayout() // シミュレータの種類によっては、これがないと警告が発生 39 // アラートを画面に表示 40 self.present(alert, animated: true, completion: nil) 41 42 //画面遷移(ViewControllerに飛ぶ) 43 let next = storyboard!.instantiateViewController(withIdentifier: "ViewController") 44 self.present(next,animated: true, completion: nil) 45 } 46 47 48 @IBAction func HitoryButton(_ sender: Any) { 49 } 50 51 52 override func viewDidAppear(_ animated: Bool) { 53 super.viewDidAppear(animated) 54 55 // ナビゲーションを透明にする処理 56 self.navigationController!.navigationBar.setBackgroundImage(UIImage(), for: .default) 57 self.navigationController!.navigationBar.shadowImage = UIImage() 58 } 59}
自己解決出来た所
以下のように遷移をするのを遅らせる事により入力完了後に遷移する事が出来た
//遅延に関するコード DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.performSegue(withIdentifier: "ViewController", sender: nil) }
現在困っている事
アラートで入力した内容が意図したtitleに表示にされずに遷移先のnavigationitemに反映されてしまう。
やりたい事しては、navigationのtitleとして入力したものを反映させたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/26 17:10