- New FileからStoryboardを追加(ここでは「Search.storyboard」とする)
- LibraryからUIViewControllerをstoryboard上にドラッグアンドドロップ
- 追加されたUIViewControllerを選択し、画面上部のメニューバーより [Editor] > [Embed in] > [Navigation Controller] を選択
- 追加されたNavigationViewControllerを選択した状態でSotryboard IDを指定(ここでは「SearchNavigationController」とする)
5 .Navigationbarのタイトルをつけるため、UIViewControllerの Navigation Item を選択し、Utilitiesエリアの [Title] を入力(ここでは「検索」とする)
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とする)
これを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