swift NavigatinController と TabbarControllerの関係

NavigationConrollerはTabbarの下の階層にある。

ポイント: NavigatonControllerは各ViewControllerを保持している

Tabbar  |——NavicationController———VC1
        |——NavicationController———VC2
        |——NavicationController———VC3

StoryBoardを見ると理解しやすい

f:id:happy_teeth_ago:20201230233905p:plain

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の設定はこちら

f:id:happy_teeth_ago:20201231001139p:plain

下記コードは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()
        
        
    }