★ 先頭のViewControllerを取得
let topViewController = self.navigationController!.topViewController★ 自分にぶら下がっているViewControllerの配列を取得、設定する
let vcArray = self.navigationController?.viewControllers
// ナビコンの順番を入れ替えて設定する
if var viewArray = self.navigationController?.viewControllers {
swap(&viewArray[0], &viewArray[1])
self.navigationController?.viewControllers = viewArray
}★ ナビコンのタイトルを設定する
self.navigationItem.title = "Navi Title"
// ViewControllerの self.title = "Navi Title" でも同じことはできる★ ViewControllerのNavigationBarを非表示にする
// 画面表示前に処理を記述
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(true, animated: false)
}★ ナビバーの左右のBarButtonItemを生成する
// Right
let rightBarButton = UIBarButtonItem(title: "right", style: .Plain, target: self, action: Selector("pushRightButton"))
self.navigationItem.rightBarButtonItem = rightBarButton
func pushRightButton() {
print("pushRightButton!")
}
// Left
let leftBarButton = UIBarButtonItem(title: "Left", style: .Plain, target: self, action: Selector("pushLeftButton"))
self.navigationItem.leftBarButtonItem = leftBarButton
func pushLeftButton() {
print("pushLeftButton!")
}★ 戻るボタンを非表示にする
self.navigationItem.hidesBackButton = true★ 遷移する画面、アニメーションの有無を指定して画面遷移する
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let nextVC = storyboard.instantiateViewControllerWithIdentifier("next")
self.navigationController?.pushViewController(nextVC, animated: true)★ アニメーションの有無を指定して一つ前の画面へ戻る
self.navigationController?.popViewControllerAnimated(true)
let viewController = self.navigationController?.popViewControllerAnimated(true)
//=> 戻り値は現在のViewController★ 戻りたいViewControllerとアニメーションの有無を指定して画面を戻る
self.navigationController?.popToViewController("戻りたいViewController", animated: false)
// Usage
if let viewArray = self.navigationController?.viewControllers {
self.navigationController?.popToViewController(viewArray[0], animated: false)
}★ アニメーションの有無を指定してナビゲーションの先頭画面まで遷移する
self.navigationController?.popToRootViewControllerAnimated(true)★ ナビゲーションバーの表示、非表示を切り替える
self.navigationController?.navigationBarHidden = true★ アニメーションの有無を指定して、ナビゲーションバーの表示、非表示を切り替える
self.navigationController?.setNavigationBarHidden(true, animated: true)★ 現在表示中のViewControllerを取得する
let visibleVC = self.navigationController?.visibleViewController★ 画面タップでナビバーを隠すかどうかの設定
self.navigationController?.hidesBarsOnTap = true★ Delegateを設定する
// UINavigationControllerDelegateを継承
class ViewController: UIViewController, UINavigationControllerDelegate { }
// NavigationControllerのDelegateを設定する
self.navigationController?.delegate = self★ NavigationControllerの遷移速度を調節する
※遷移が綺麗に見えないので検証が必要
let nextVC = storyboard?.instantiateViewControllerWithIdentifier("vc")
let transition = CATransition()
transition.duration = 0.6
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromRight
self.navigationController!.view.layer.addAnimation(transition, forKey: nil)
self.navigationController?.pushViewController(nextVC!, animated: true)// ナビゲーションの背景色を設定
UINavigationBar.appearance().barTintColor = UIColor.red
// ナビゲーションアイテムのカラーを設定する
UINavigationBar.appearance().tintColor = UIColor.white
// ナビゲーションタイトルのカラーを設定する
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]★ NavigationBarを透明にする
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// ナビゲーションを透明にする処理
self.navigationController!.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController!.navigationBar.shadowImage = UIImage()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// 透明にしたナビゲーションを元に戻す処理
self.navigationController!.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationController!.navigationBar.shadowImage = nil
}★ 画面が表示される直前に呼ばれる
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
}