UIKit框架-高階控制元件Swift版本: 9.UINavigationController方法/屬性詳解
阿新 • • 發佈:2018-12-30
前面我們講解了UISegemtedControl分段式控制元件, 現在讓我們來看看 iOS 另一個非常常用的控制元件, UINavigationController.
1.UINavigationController常用屬性
// 1.獲取 UINavigationController 的頂部的檢視控制器
var topViewController: UIViewController! { get }
// 2.獲取 UINavigationController 可見的檢視控制器
var visibleViewController: UIViewController! { get }
// 3.設定 UINavigationController 的 viewControllers 物件
var viewControllers: [AnyObject]!
// 4.設定 UINavigationController 的導航欄控制器是否隱藏, 預設是 false
var navigationBarHidden: Bool
// 5.獲取 UINavigationController 的導航欄控制器
var navigationBar: UINavigationBar { get }
// 6.設定 UINavigationController 的內建工具欄是否可見(預設是 ture)
var toolbarHidden: Bool
// 7.獲取 UINavigationController 的 toolbar
var toolbar: UIToolbar! { get }
// 8.設定 UINavigationController 的代理物件
var delegate: UINavigationControllerDelegate?
// 9.獲取 UINavigationController 的手勢識別頂部檢視控制器
var interactivePopGestureRecognizer: UIGestureRecognizer! { get }
// 10.設定 UINavigationController 當鍵盤出現時是否隱藏導航欄和工具欄
var hidesBarsWhenKeyboardAppears: Bool
// 11.設定 UINavigationController 是否使用向上滑動的手勢隱藏導航欄和工具欄
var hidesBarsOnSwipe: Bool
// 12.獲取 UINavigationController 用手勢識別隱藏導航欄和工具欄
var barHideOnSwipeGestureRecognizer: UIPanGestureRecognizer { get }
// 13.設定 UINavigationController 是否在垂直顯示時隱藏
var hidesBarsWhenVerticallyCompact: Bool
// 14.設定 UINavigationController 是否使用點選手勢來隱藏
var hidesBarsOnTap: Bool
// 15.獲取 UINavigationController 隱藏時所使用的手勢
var barHideOnTapGestureRecognizer: UITapGestureRecognizer { get }
2.UINavigationController常用的方法
// 1.該方法是用來設定 UINavigationController 跳轉到指定的檢視控制器, 是否使用動畫.
func pushViewController(viewController: UIViewController, animated: Bool)
// 2.該方法是用來設定 UINavigationController Pop到其他檢視控制器時是否使用動畫, 並且返回的型別必須是 UIViewController
func popViewControllerAnimated(animated: Bool) -> UIViewController?
// 3.該方法是用來設定 UINavigationController Pop到指定的檢視控制器, 是否使用動畫, 返回的型別是任意型別
func popToViewController(viewController: UIViewController, animated: Bool) -> [AnyObject]?
// 4.該方法是用來設定 UINavigationController Pop到根檢視時是否使用動畫, 並且返回的型別必須是任意型別
func popToRootViewControllerAnimated(animated: Bool) -> [AnyObject]?
// 5.該方法是用來替換之前於 UINavigationController 繫結的檢視控制器, 並且是否使用動畫
func setViewControllers(viewControllers: [AnyObject]!, animated: Bool)
// 6.該方法是用來設定 UINavigationController 的導航欄是否隱藏, 是否使用動畫
func setNavigationBarHidden(hidden: Bool, animated: Bool)
// 7.該方法是用來設定 UINavigationController 的工具欄是否隱藏, 是否使用動畫
func setToolbarHidden(hidden: Bool, animated: Bool)
// 8.該方法是用來設定 UINavigationController 顯示指定的 ViewController
func showViewController(vc: UIViewController, sender: AnyObject!)
3.UINavigationController代理方法
// 1.該方法使用來設定 UINavigationController 將要顯示時所呼叫的方法
optional func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool)
// 2.該方法使用來設定 UINavigationController 完全顯示時所呼叫的方法
optional func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool)
4.程式碼演示
首先我們要再AppDelegate.swift檔案中實現
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window!.backgroundColor = UIColor.grayColor()
self.window!.makeKeyAndVisible()
let viewController = ViewController()
let navigationController = UINavigationController(rootViewController: viewController)
self.window!.rootViewController = navigationController
return true
}
遵守代理協議
class ViewController: UIViewController, UINavigationControllerDelegate { }
自定義UINavigationController
func myNavigationContronller() {
// 1.設定 UINavigationController 的 Title
self.title = "UINavigationContronller"
// 2.設定 UIVavigationController 的按鈕 Title, Style, Target, Action 等方法屬性
let backBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: self, action: "backAction")
let nextBarButtonItem = UIBarButtonItem(title: "下一頁", style: UIBarButtonItemStyle.Plain, target: self, action: "nextAction")
// 3.設定 UINavigationItem
self.navigationItem.leftBarButtonItem = backBarButtonItem
self.navigationItem.rightBarButtonItem = nextBarButtonItem
// 4.獲取 UINavigationController 的頂部的檢視控制器
let topView = self.navigationController?.topViewController
println(topView)
// 5.獲取 UINavigationController 可見的檢視控制器
let visibleView = self.navigationController?.visibleViewController
println(visibleView)
// 6.設定 UINavigationController 的導航欄控制器
self.navigationController?.viewControllers
// 7.設定 UINavigationController 的導航欄控制器是否隱藏(預設是 false)
self.navigationController?.navigationBarHidden = false
// 8.獲取 UINavigationController 的導航欄控制器
let navigationBar = self.navigationController?.navigationBar
println(navigationBar)
// 9.設定 UINavigationController 的內建工具欄是否可見(預設是 ture)
self.navigationController?.toolbarHidden = false
// 10.獲取 UINavigationController 的 toolbar
let toolbar = self.navigationController?.toolbar
println(toolbar)
// 11.設定 UINavigationController 的代理物件
self.navigationController?.delegate = self
// 12.獲取 UINavigationController 的手勢識別頂部檢視控制器
let pop = self.navigationController?.interactivePopGestureRecognizer
println(pop)
// 13.設定 UINavigationController 當鍵盤出現時是否隱藏導航欄和工具欄
self.navigationController!.hidesBarsWhenKeyboardAppears = true
// 14.設定 UINavigationController 是否使用向上滑動的手勢隱藏導航欄和工具欄
self.navigationController?.hidesBarsOnSwipe = true
// 15.獲取 UINavigationController 用手勢識別隱藏導航欄和工具欄
let barHide = self.navigationController!.barHideOnSwipeGestureRecognizer
println(barHide)
// 16.設定 UINavigationController 是否在垂直顯示時隱藏
self.navigationController!.hidesBarsWhenVerticallyCompact = true
// 17.設定 UINavigationController 是否使用點選手勢來隱藏
self.navigationController?.hidesBarsOnTap = true
// 18.獲取 UINavigationController 隱藏時所使用的手勢
let barHideOnTap = self.navigationController!.barHideOnTapGestureRecognizer
println(barHideOnTap)
// 19.設定 UINavigationController 的導航欄是否隱藏, 是否使用動畫
self.navigationController?.setNavigationBarHidden(true, animated: true)
// 20.設定 UINavigationController 的工具欄是否隱藏, 是否使用動畫
self.navigationController?.setToolbarHidden(true, animated: true)
}
自定義代理方法以及監聽方法
// 1.該方法使用來設定 UINavigationController 將要顯示時所呼叫的方法
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
println("UINavigationController 將要顯示")
}
// 2.該方法使用來設定 UINavigationController 完全顯示時所呼叫的方法
func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
println("UINavigationController 完全顯示")
}
// 3.返回按鈕的監聽方法
func backAction() {
println("點選了返回")
}
// 4.下一頁按鈕的監聽方法
func nextAction() {
println("點選了下一頁")
}
5.最終效果
PS: UINavigationController 是繼承與 UIViewController 的, 所以裡面的方法以及屬性都是可以使用的.
好了, 這次我們就講到這裡, 下次我們繼續~~