

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

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

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

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

[code]

    //最初の画面のコード
    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)
        }
    }
    
    
[/code]

[code]

    //遷移先の画面のコード
    import UIKit
    
    class viewControllerConfig: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.title = "Config"
            self.view.backgroundColor = UIColor.cyan
        }
    
    }
    
[/code]


CC BY-SA 4.0
2020-05-02T09:54:42.547
66211
2023-11-21T06:01:10.187
2020-05-02T10:47:35.167
3060
39944
question
swift
Swift での画面遷移が意図した通り動かない


`self.navigationController?` がnilだからでしょうね。

`rightHandAction()` 内の

[code]

    self.navigationController?.pushViewController(naviVC,animated: true)
    
[/code]

がアンラップされたタイミングで終了してるのだと思います。

`UINavigationBar` を自力で追加したりしないで、以下の参考リンクを元に `NavigationController`
を正しく設定すればよいと思います。

**参考リンク**  
[Swiftでの画面遷移についてまとめ -
Qiita](https://qiita.com/superman9387/items/c006ced215352f28a7b9#navigationcontroller%E3%81%A7%E7%94%BB%E9%9D%A2%E9%81%B7%E7%A7%BB)


CC BY-SA 4.0
2020-05-03T01:27:54.343
66226
2020-05-03T01:27:54.343
39936
66211
answer