Entertainer Engineering

人を楽しませられる技術者を目指すあおかびんのブログ

Swiftで NavigationBarを出したり引っ込めたりする話

こんばんは、かびさん@あおかびんです。

21日間ブログを書くというチャレンジに失敗しまくっている次第ですが
また気をとりなおしていきたいと思います。

さて、NavigationBarで前の画面に戻れる機能は便利なのですが
場合によっては表示させたくないということがあるかと思います。

そこで出したり引っ込めたりする方法を書いていきたいと思います。

流れは

  1. 画面遷移はNavigationControllerに任せる
  2. 画面を描画する前にNavigationBarの設定をする

こんな感じになるかと思います。

実際に書いてみましょう。

1.AppDelegate.swift

class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // 最初に表示する画面を指定する
        let firstView: MainViewController = MainViewController()
        // NavigationControllerを設定する
        let myNavigationController: UINavigationController = UINavigationController(rootViewController: firstView)
        
        // おまじない
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.rootViewController = myNavigationController
        self.window?.makeKeyAndVisible()
        return true
    }
    ・・・
}

最初に表示する画面からNavigationControllerを設定する感じですね。
次はMainViewControllerを設定します。

2. MainViewController.swift (NavigationBarを表示しない)

class MainViewController: UIViewController {
    …
    // ボタンが押された時の処理
    func touchButton(sender: UIButton){
        let subViewController: SubViewController = SubViewController()
        self.navigationController?.pushViewController(subViewController, animated: true)
    }
    // 画面をロードする前に呼ばれるメソッド
    override func viewWillAppear(animated: Bool) {
        // NavigationBarを隠す処理
        self.navigationController?.setNavigationBarHidden(true, animated: true)
    }
    …
}

これによって画面をロードする時にNavigationBarを表示しない設定をします。
次は、このボタンを押したあとでSubViewControllerの方ではNavigationBarを表示しましょう。

3. SubViewController.swift (NavigationBarを表示する)

class SubViewController: UIViewController {
    ・・・
    override func viewWillAppear(animated: Bool) {
        self.navigationController?.setNavigationBarHidden(false, animated: true)
    }
    ・・・
}

これを追加することによって、<BackのついたNavigationBarを表示できると思います。

こんな感じですかね。

ブログを更新するのを忘れちゃうのは嫌だよな。。。
やっぱ通知つけようかな。。。

以上、あおかびんでした。