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)用于单独功能页面的跳转和主要业务逻辑没有关联(登录,歌曲播放页,系统相册,应用中调用系统功能)。