11/03UINavigationController

UINavigationController

UINavigationController:导航控制器,,是iOS中最常用的多视图控制器之一,用它来管理多个视图控制器。

导航控制器可以称为是,管理控制器的控制器,主要管理有层次递进关系的控制器。

UINavigationController继承于UIViewController,以栈的方式管理所控制的视图控制器,至少要有一个被管理的视图控制器,这个控制器我们称作,导航控制器的根视图控制器。

任何继承自UIViewController的类(多态)都可以作为根控制器。

//创建根视图

let ViewC =ViewController()

//创建创建导航控制器 把rootVC作为导航控制器的根视图控制器

let navc =UINavigationController(rootViewController:ViewC)

//设置导航为window的根视图

window=UIWindow(frame:UIScreen.mainScreen().bounds)

window?.rootViewController= navc

window?.backgroundColor=UIColor.whiteColor()

window?.makeKeyAndVisible()

returntrue

UINavigetionBar

UINavigationBar(导航栏)上的设置主要分两部分,一为导航栏上的各种导航部件(UINavigationItem),二为导航栏自身的相关设置。

navigationBar—导航条,iOS7之后默认是半透明的,iOS7之前默认是不透明的。

navigationBar竖屏下默认高度44,横屏下默认高度32。

iOS7之后,navigationBar的背景会延伸到statusBar上。导航栏高度仍保持44,但显示效果为64。

每个视图控制器都有一个navigationItem属性。navigationItem中设置的左按钮、右按钮、标题等,会随着控制器的显示,也显示到navigationBar上。

//导航栏标题

navigationItem.title="Setting"

// self.title会同时改变导航栏的标题和tabBar的标题 可以用如下方法单独操作导航栏标题

//self.navigationItem.title=@"标题";

//UIBarButtonItem

//左按钮

let leftBarBtn =UIBarButtonItem(barButtonSystemItem:.Search, target:self, action:"leftBtnAction")

navigationItem.leftBarButtonItem= leftBarBtn

//右按钮

letrightBarBtn =UIBarButtonItem(barButtonSystemItem:.Camera, target:self, action:"rightBtnAction")

navigationItem.rightBarButtonItem= rightBarBtn

//中间视图对象及属性

letsegment =UISegmentedControl(items: ["已接来电","未接来电"])

segment.frame=CGRectMake(0,0,100,30)

segment.selectedSegmentIndex=0

navigationItem.titleView= segment

//显隐属性

navigationController?.navigationBarHidden=false

//样式

navigationController?.navigationBar.barStyle= .Default

//背景颜色

navigationController?.navigationBar.backgroundColor=UIColor.cyanColor()

//导航栏颜色

navigationController?.navigationBar.barTintColor=UIColor.blueColor()

//元素颜色

navigationController?.navigationBar.tintColor=UIColor.redColor()

//半透明效果

navigationController?.navigationBar.translucent=true

letmyview =UIView(frame:CGRectMake(0,0,150,150))

myview.backgroundColor=UIColor.yellowColor()

view.addSubview(myview)


页面跳转

UINavigationController通过栈的方式管理控制器的切换,控制入栈和出栈来展示各个视图控制器。

UINavigationController的ContentView里始终显示栈顶控制器的view。

viewControllers属性是一个可变数组(NSMutableArray)存储了栈中的所有被管理的控制器,入栈的时候,使用addObject把新的视图控制器对象添加到数组末尾,出栈时removeLastObject移除数组末尾的试图控制器对象。

navigationController属性,父类中的属性,每个在栈中的控制器,都能通过此属性,获取自己所在的UINavigationController对象。

常用属性:viewControllers、topViewController、visibleViewController、navigationBar、navigationItem

入栈出栈:

pushViewController:animated:进入下一个

popViewControllerAnimated:返回上一个

popToViewController:animated:返回指定视图控制器

popToRootViewControllerAnimated:返回根视图控制器

进入下一个视图控制器

funcrightBtnAction(){

//创建控制器2

letSecondVC =SecondViewController()

//使用当前控制器所在的导航视图控制器跳转到第二个控制器 push推出

navigationController?.pushViewController(SecondVC, animated:true)

println("right!!")

}

返回上一页

funcbackAction(btn:UIBarButtonItem){

println("返回")

navigationController?.popViewControllerAnimated(true)

}

返回根视图控制器

navigationController?.popToRootViewControllerAnimated(true)

模态

模态进入下一页

functextAction(){

//创建对象

let fifthVC =fifthViewController()

//模态控制器

presentViewController(fifthVC, animated:true) { () ->Voidin

println("模态动作完成")

}

}

模态返回上一页

func dismissViewController(){

//模态返回

dismissViewControllerAnimated(true, completion: { () ->Voidin

println("模态消失动作已结束")

})

}

页面切换的两种方式对比

页面的切换方式主要分为:推出(push)和模态(present)。

推出(push)用于一系列的视图之间的跳转有层次递进关系。

模态(present)用于单独功能页面的跳转和主要业务逻辑没有关联(登录,歌曲播放页,系统相册,应用中调用系统功能)。

你可能感兴趣的:(11/03UINavigationController)