UINavigationController與簡單的頁面傳值

UINavigationController

導航控制器,是視圖控制器的子類,做用是控制其餘控制器,屬於容器視圖控制器。導航控制器控制的控制器是有層級關係的。好比:設置->通用->語言
UINavigationController繼承於UIViewController,以棧的方式管理所控制的的視圖控制器,至少有一個被管理的視圖控制器,這個控制器稱爲導航控制器的根視圖控制器

(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];
}
相關文章
相關標籤/搜索