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 的, 所以里面的方法以及属性都是可以使用的.


好了, 这次我们就讲到这里, 下次我们继续~~

posted @ 2015-04-21 00:14  背着吉他去流浪  阅读(1233)  评论(0编辑  收藏  举报