1. 程式人生 > >UIKit框架-高階控制元件Swift版本: 9.UINavigationController方法/屬性詳解

UIKit框架-高階控制元件Swift版本: 9.UINavigationController方法/屬性詳解

前面我們講解了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.最終效果

1

2

PS: UINavigationController 是繼承與 UIViewController 的, 所以裡面的方法以及屬性都是可以使用的.

好了, 這次我們就講到這裡, 下次我們繼續~~