swift NavigatinController と TabbarControllerの関係
NavigationConrollerはTabbarの下の階層にある。
ポイント: NavigatonControllerは各ViewControllerを保持している
Tabbar |——NavicationController———VC1 |——NavicationController———VC2 |——NavicationController———VC3
StoryBoardを見ると理解しやすい
NavigationControllerはlast in first out のqueue
stackの中にViewControllerがあれば、そこまでpop する
各ViewControllerを配列で保持している 階層をもっているということ
stackの中にViewControllerがなければ push する
この記事がわかりやすいです
https://wa3.i-3-i.info/word17413.html
stackの中にある場合は、StoryBoardを表示すする際は、pushを利用する
pushの場合のStoryBoardの設定はこちら
下記コードはNavigationController がない状態での遷移
@IBAction func addButtonTapped(_ sender: Any) { let nextVC = UIStoryboard(name: "DiaryCreate", bundle: nil).instantiateInitialViewController()! present(nextVC, animated: true, completion: nil) }
NavigationControllerをStoryBoardに追加するそして、stackには無いのでpush
@IBAction func addButtonTapped(_ sender: Any) { let nextVC = UIStoryboard(name: "DiaryCreate", bundle: nil).instantiateInitialViewController()! navigationController?.pushViewController(nextVC, animated: true) }
Delegateの設定 UITabBarControllerDelegate, UINavigationControllerDelegate 設定すること
UITabBarControllerDelegateの役割
特定のタブを選択するかどうかを決定したり、タブを選択した後にアクションを実行したり、 ユーザーがタブの順序をカスタマイズする前または後にアクションを実行したりするために使用できます。 これらのメソッドをカスタムオブジェクトに実装した後、そのオブジェクトを対応するUITabBarControllerオブジェクトのデリゲートプロパティに割り当てる必要があります。
UITabBarDelegateの役割
userがTabbarを並べ替えたり、削除できるようにするときに利用する。 ほとんど利用することはない。
cord
class DateInputController: UIViewController,UITabBarControllerDelegate, UINavigationControllerDelegate override func viewDidLoad() { super.viewDidLoad() tabBarController?.delegate = self navigationController?.delegate = self setUpDatePicker() setUpCalendarButton() }