UINavigationController
UINavigationController:導航控制器,,是iOS中最常用的多視圖控制器之一,用它來管理多個視圖控制器。
導航控制器可以稱為是,管理控制器的控制器,主要管理有層次遞進關系的控制器荸百。
UINavigationController繼承于UIViewController,以棧的方式管理所控制的視圖控制器,至少要有一個被管理的視圖控制器,這個控制器我們稱作,導航控制器的根視圖控制器闻伶。
任何繼承自UIViewController的類(多態(tài))都可以作為根控制器。
//創(chuàng)建根視圖
let ViewC =ViewController()
//創(chuàng)建創(chuàng)建導航控制器 把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(){
//創(chuàng)建控制器2
letSecondVC =SecondViewController()
//使用當前控制器所在的導航視圖控制器跳轉到第二個控制器 push推出
navigationController?.pushViewController(SecondVC, animated:true)
println("right!!")
}
返回上一頁
funcbackAction(btn:UIBarButtonItem){
println("返回")
navigationController?.popViewControllerAnimated(true)
}
返回根視圖控制器
navigationController?.popToRootViewControllerAnimated(true)
模態(tài)
模態(tài)進入下一頁
functextAction(){
//創(chuàng)建對象
let fifthVC =fifthViewController()
//模態(tài)控制器
presentViewController(fifthVC, animated:true) { () ->Voidin
println("模態(tài)動作完成")
}
}
模態(tài)返回上一頁
func dismissViewController(){
//模態(tài)返回
dismissViewControllerAnimated(true, completion: { () ->Voidin
println("模態(tài)消失動作已結束")
})
}
頁面切換的兩種方式對比
頁面的切換方式主要分為:推出(push)和模態(tài)(present)。
推出(push)用于一系列的視圖之間的跳轉有層次遞進關系册着。
模態(tài)(present)用于單獨功能頁面的跳轉和主要業(yè)務邏輯沒有關聯(lián)(登錄,歌曲播放頁,系統(tǒng)相冊,應用中調用系統(tǒng)功能)拴孤。