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

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

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

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

Q&A

解決済

1回答

789閲覧

【swift】iosアプリの画面遷移について

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

1クリップ

投稿2020/05/02 06:50

編集2020/05/02 09:55

swiftで画面遷移をするコードを書いているのですが、うまくいきません。

実装しようとしている機能:navigationbar の右に配置したボタンをタップしてpush遷移する。

結果:実行してもエラーは出ないがタップしても遷移されない。タップしたときにボタンの関数の中にあるデバッグ用のprint文は実行されているのでボタン自体はできてそう。

swift初学者のため拙いコードかもしれませんがよろしくお願いします。

最初の画面

import UIKit class ViewController: UIViewController { let navBar = UINavigationBar(frame : CGRect(x: 0, y: 40, width: UIScreen.main.bounds.size.width, height: 100 )) let navItem : UINavigationItem = UINavigationItem(title: "タイトル") override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.gray navItem.rightBarButtonItem = UIBarButtonItem(title: "遷移", style: UIBarButtonItem.Style.plain, target: self, action:#selector(self.rightHandAction)) navBar.pushItem(navItem, animated: true) self.view.addSubview(navBar) @objc func rightHandAction(_ sender: UIBarButtonItem) { print("right bar button action") let vcC : UIViewController = viewControllerConfig() let naviVC : UINavigationController = UINavigationController(rootViewController: vcC) self.navigationController?.pushViewController(naviVC,animated: true) } }

遷移先の画面

import UIKit class viewControllerConfig: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.title = "Config" self.view.backgroundColor = UIColor.cyan } }

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

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

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

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

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

TsukubaDepot

2020/05/02 11:00

これは、全てコードベースで実装したほうがよろしいのでしょうか。 Storyboardベースで行った方が管理も設定も楽です。
guest

回答1

0

ベストアンサー

self.navigationController?.pushViewController(naviVC,animated: true) ここの navigationController が nil になっている気がします。

ためしに下記のようにしてみてください。printの内容が出力されるんじゃないかと思います。

swift

1guard let naviCon = self.navigationController else { 2 print("navigationControllerがnil!") 3 return 4}

UINavigationControllerの追加方法(Storyboardでの作業)

  1. Storyboard に UINavigationController を追加する
  2. UINavigationController の RootViewController に ViewController を指定する
  3. UINavigationController を選択し画像の Is Initial View Controller にチェックする

initial

これで self.navigationController が nil ではなくなると思います。
追加したあとにこのあたりの処理も修正が必要になるかと思います。

swift

1navItem.rightBarButtonItem = UIBarButtonItem(title: "遷移", style: UIBarButtonItem.Style.plain, target: self, action:#selector(self.rightHandAction)) 2 navBar.pushItem(navItem, animated: true) 3 self.view.addSubview(navBar)

NavigationController から NavigationController への Push はできなかったと思うのでここも修正が必要になるかと思います。

swift

1let vcC : UIViewController = viewControllerConfig() 2 let naviVC : UINavigationController = UINavigationController(rootViewController: vcC) 3 self.navigationController?.pushViewController(naviVC,animated: true)

投稿2020/05/02 14:56

usagi001

総合スコア208

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

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

退会済みユーザー

退会済みユーザー

2020/05/05 13:06

ご回答ありがとうございます! navigationcontrollerについての勉強が不足しておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問