(1)建立web
建立導航控制器而且爲導航控制器添加根視圖控制器數組
FirstViewController *firstVC = [[FirstViewController alloc]init]; UINavigationController *navC = [[UINavigationController alloc]initWithRootViewController:firstVC];(2)工做原理spa
UINavigationController經過棧的方式管理控制器的切換,控制入棧和出棧來展現各個視圖控制器,UINavigationControl的ContentView裏面顯示的是處於棧頂控制器的view代理
(3)經常使用屬性code
viewControllers 該屬性存儲了棧中的全部被管理的控制器navigationController 父類中的屬性,每一個在棧中的控制器,都能經過該屬性獲取本身所在的UINavigationController對象topViewController 獲取位於棧頂的控制器visibleviewController 當前正在顯示的控制器 navigationBar 獲取導航條對象
(4)入棧與出棧繼承
進入下一個視圖控制器圖片
pushViewController:animated返回上一個視圖控制器it
popViewControllerAnimated:返回到指定的視圖控制器io
popToViewController:animated返回至根視圖控制器
popToRootViewControllerAnimated(5)添加子控制器 第一種方法:上面初始化建立的方式
第二種方法:將須要NaviigationController管理的視圖添加進到NavigationController 的子視圖數組中
navigation.viewControllers = @[firstVC,secondVC,thirdVC];
導航欄上面自己沒有內容,只是view視圖,導航欄上面的控件事當前棧頂控制器的數據,好比:title button。 導航欄只有一條,導航欄上面的數據是可變的
(1)自定義導航欄 背景顏色 填充顏色 標題 導航條類型
獲取: navigationBar = navgationController.navigationBar
導航欄風格:黑底,透明。。:navigationBar.barStyle
填充顏色:navigationBar.barTinColor
導航欄上面空間的顏色:navigationBar.tintColor
導航欄是否透明:navigationBar.translucent
設置導航欄背景圖片:navigationBar setBackgroundImage....
(2)UINavigationBar出了定義自身的樣式外,還管理一組UInaavigationItem,UINavigationBar以棧的方式管理一組UINavigationItem。提供了push和pop操做item。 每一個視圖控制器都有一個navigationItem屬性,navigationItem中設置了左按鈕,右按鈕,標題等,會隨着控制器的顯示也會顯示到navigationBar上面 導航欄標題:title
標題視圖:titleView
左按鈕:leftBarButton
右按鈕:rightBarButton
(1)第一種:屬性傳值,應用在從當前界面日後面界面傳
將要傳到後面頁面的屬性的值設置成後面的屬性,在切換頁面的時候將要傳送的值setter該屬性
(2)第二種:代理傳值,應用在後面界面往前面傳
將當前頁面設置爲後面頁面的代理,而且遵照後面頁面自定義的協議。在後面頁面切換至前面頁面的時候讓代理執行協議中的方法,協議中的方法
- (void)backFirstVC:(UIButton *)button { 返回上一個視圖控制器 [self.navigationController popViewControllerAnimated:YES]; 代理傳值:_textField.text [_delegate secondVCBackToFirstVCWithTextFieldString: _textField.text]; }