LoginSignup
2
2

More than 3 years have passed since last update.

Storyboardで定義されたUINavigationControllerをSwiftコードから呼び出す方法

Last updated at Posted at 2020-08-16
  1. New FileからStoryboardを追加(ここでは「Search.storyboard」とする)
  2. LibraryからUIViewControllerをstoryboard上にドラッグアンドドロップ
  3. 追加されたUIViewControllerを選択し、画面上部のメニューバーより [Editor] > [Embed in] > [Navigation Controller] を選択
  4. 追加されたNavigationViewControllerを選択した状態でSotryboard IDを指定(ここでは「SearchNavigationController」とする)

image.png

5 .Navigationbarのタイトルをつけるため、UIViewControllerの Navigation Item を選択し、Utilitiesエリアの [Title] を入力(ここでは「検索」とする)

image.png

6 .最後に以下のコードでNavigationViewControllerを呼び出す。

MainViewController.swift
    let storyboard = UIStoryboard(name: "Search", bundle: nil)
    let searchNaviVc = storyboard.instantiateViewController(withIdentifier: "SearchNavigationController") as! UINavigationController
    self.present(searchNaviVc,animated: true, completion: nil)

※補足1:任意のViewControllerのコードと紐づけるには、classにViewControllerを指定する(ここではSearchViewControllerとする)
image.png

これをNavigationViewControllerから呼び出したいときは以下とする。

MainViewController.swift
    let storyboard = UIStoryboard(name: "Search", bundle: nil)
    let searchNaviVc = storyboard.instantiateViewController(withIdentifier: "SearchNavigationController") as! UINavigationController
    let vc = searchNaviVc.viewControllers[0] as! SearchViewController
    self.present(vc,animated: true, completion: nil)

※補足2:UITabBarControllerから使いたいときの例

MainTabBarViewController.swift
final class MainTabBarViewController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // TODOリストタブ
        let topVc = TopViewController()
        topVc.tabBarItem = UITabBarItem(title: "TODO list", image: UIImage(systemName: "text.badge.checkmark"), tag: 1)
        let topNaviVc = UINavigationController(rootViewController: topVc)

        // Searchタブ ⭐️今回追加したstoryboardのコード⭐️
        let storyboard = UIStoryboard(name: "Search", bundle: nil)
        let searchNaviVc = storyboard.instantiateViewController(withIdentifier: "SearchNavigationController") as! UINavigationController
        searchNaviVc.tabBarItem = UITabBarItem(title: "Search", image: UIImage(systemName: "magnifyingglass"), tag: 2)

        // カレンダータブ
        let calVc = ColorPickerViewController()
        calVc.tabBarItem = UITabBarItem(title: "Calendar", image: UIImage(systemName: "calendar"), tag: 3)
        let calNaviVc = UINavigationController(rootViewController: calVc)
        setViewControllers([topNaviVc, searchNaviVc, calNaviVc], animated: false)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

<参考にしたサイト>
https://studio.beatnix.co.jp/develop/swift/storyboard-program/
https://qiita.com/midori004/items/4a67dc70af582aa91eec
https://qiita.com/chubura/items/03a3cddf8fe17361c5b2

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2