UINavigationController

1.當(dāng)要切換的各個(gè)屏幕之間沒有相互依存的關(guān)系時(shí),UITabBarController對(duì)象可以很好地完成任務(wù)。
2.但是當(dāng)多個(gè)屏幕互有關(guān)聯(lián)時(shí),就要使用UINavigationController對(duì)象

當(dāng)某個(gè)應(yīng)用通過UINavigationController對(duì)象顯示多個(gè)屏幕的信息時(shí),相應(yīng)的UINavigationController對(duì)象會(huì)以棧的形式保存所有屏幕的信息。這里的棧是一個(gè)數(shù)組對(duì)象,保存的都是UIViewController對(duì)象。一個(gè)UIViewController對(duì)象的視圖對(duì)應(yīng)一個(gè)屏幕。只有位于棧頂?shù)腢IViewController對(duì)象,其視圖才是可見的。

初始化UINavigationController對(duì)象時(shí),需要傳入一個(gè)UIViewController對(duì)象。這個(gè)UIViewController對(duì)象將成為UINavigationController對(duì)象的根視圖控制器(rootviewcontroller),且根視圖控制器將永遠(yuǎn)位于棧底。應(yīng)用可以在運(yùn)行時(shí)向UINavigationController的棧壓入更多的視圖控制器。

UINavigationController對(duì)象的棧

UINavigationController是UIViewController的子類,所以UINavigationController對(duì)象也有自己的視圖。該對(duì)象的視圖有兩個(gè)子視圖:一個(gè)是UINavigationBar對(duì)象,另一個(gè)是topViewController的視圖。

Homepwner應(yīng)用對(duì)象圖

針對(duì)XIB文件中的每一個(gè)UITextField對(duì)象,將其delegate屬性關(guān)聯(lián)至File'sOwner(按住Control,從UITextField對(duì)象拖曳至File'sOwner,然后選擇彈出菜單中的delegate)

凡是加入了某個(gè)UINavigationController對(duì)象的棧的視圖控制器,都可以向自己發(fā)送navigationController消息,以得到指向該對(duì)象的指針。

UINavigationController對(duì)象的根視圖控制器對(duì)象,一直停留在棧中,總能得到指向相應(yīng)UINavigationController對(duì)象的指針。
使用UINavigationController對(duì)象時(shí),經(jīng)常會(huì)由當(dāng)前處于棧頂?shù)囊晥D控制器來負(fù)責(zé)壓入另一個(gè)視圖控制器,這是常見的使用模式。

視圖控制器之間的數(shù)據(jù)傳遞

當(dāng)要在多個(gè)視圖控制器之間傳遞數(shù)據(jù)時(shí),很多剛接觸iOS開發(fā)的初學(xué)者可能會(huì)無從下手。Homepwner使用了一種簡單高效的解決方案:由根視圖控制器保存所有的數(shù)據(jù),然后將數(shù)據(jù)的子集傳給下一個(gè)視圖控制器。

當(dāng)某個(gè)視圖收到endEditing:消息時(shí),如果該視圖(或者其下的任何子視圖)是當(dāng)前的第一響應(yīng)對(duì)象,就會(huì)取消自己的第一響應(yīng)對(duì)象狀態(tài),而且虛擬鍵盤也會(huì)關(guān)閉(傳入的參數(shù)代表是否需要強(qiáng)制取消第一響應(yīng)對(duì)象狀態(tài)。某些第一響應(yīng)對(duì)象可能會(huì)拒絕退出狀態(tài),傳入YES可以強(qiáng)制其退出)。

//刷新tableview 數(shù)據(jù)
[self.tableView reloadData];

UIViewController對(duì)象有一個(gè)名為navigationItem的屬性,類型為UINavigationItem。和UINavigationBar不同,UINavigationItem不是UIView的子類,不能在屏幕上顯示。UINavigationItem對(duì)象的作用是為UINavigationBar對(duì)象提供繪圖所需的內(nèi)容。當(dāng)某個(gè)UIViewController對(duì)象成為UINavigationController的棧頂對(duì)象時(shí),UINavigationBar對(duì)象就會(huì)訪問該UIViewController對(duì)象的navigationItem,獲取和界面顯示有關(guān)的內(nèi)容。
 UINavigationItem對(duì)象默認(rèn)是“空”的。要讓UINavigationBar對(duì)象能夠顯示最基本的信息,可以為UINavigationItem對(duì)象設(shè)置一個(gè)簡單的標(biāo)題(title屬性)。當(dāng)應(yīng)用將某個(gè)UIViewController對(duì)象移至UINavigationController對(duì)象的棧頂時(shí),UINavigationBar對(duì)象就會(huì)訪問UIViewController對(duì)象的navigationItem屬性,查看相應(yīng)的title屬性是否指向有效的NSString對(duì)象。如果是,就會(huì)在UINavigationBar對(duì)象的正中顯示該字符串


UINavigationItem
設(shè)置了各種界面屬性的UINavigationItem對(duì)象

類似于UINavigationItem,UIBarButtonItem也不是UIView的子類。UINavigationItem對(duì)象封裝了一些設(shè)置信息,以便UINavigationBar在運(yùn)行時(shí)可以正確顯示該對(duì)象。同樣,UIBarButtonItem對(duì)象封裝了關(guān)于如何在UINavigationBar顯示單個(gè)按鈕的信息,UINavigationBar對(duì)象會(huì)根據(jù)UIBarButtonItem對(duì)象中的信息顯示相應(yīng)的按鈕。(UIToolbar與UINavigationBar一樣,也是通過UIBarButtonItem對(duì)象來顯示按鈕的。)
除了leftBarButtonItem和rightBarButtonItem,UIBarButtonItem對(duì)象的第三個(gè)界面屬性是titleView。UINavigationBar對(duì)象包含兩種標(biāo)題顯示模式。第一種模式是前面介紹過的:顯示一個(gè)簡單的字符串。第二種模式是在UINavigationBar對(duì)象正中顯示一個(gè)視圖。兩種模式不能共存。如果需要在UINavigationBar對(duì)象正中顯示復(fù)雜的界面,就可以先創(chuàng)建擁有自定義視圖(例如UIButton對(duì)象、UISlider對(duì)象、UIImageView對(duì)象甚至MKMapView對(duì)象)的視圖控制器,然后為該對(duì)象的titleView賦值,并指向這個(gè)自定義視圖。上面的圖中的UINavigationItem對(duì)象為例,該對(duì)象的titleView屬性指向的就是一個(gè)自定義視圖。通常情況下,使用第一種模式就可以了。

navItem.leftBarButtonItem=self.editButtonItem;

只需編寫一行代碼,向BNRItemsViewController對(duì)象發(fā)送editButtonItem消息,就能得到可以加入U(xiǎn)INavigationBar對(duì)象的Edit(編輯)按鈕。構(gòu)建并運(yùn)行應(yīng)用,點(diǎn)擊“編輯”按鈕,UITableView對(duì)象會(huì)進(jìn)入編輯模式。UIViewController對(duì)象有一個(gè)名為editButtonItem的屬性,當(dāng)該對(duì)象收到editButtonItem消息后,如果editButtonItem屬性的值是nil,就會(huì)創(chuàng)建一個(gè)標(biāo)題為“編輯”的UIBarButtonItem對(duì)象。此外,editButtonItem方法所返回的UIBarButtonItem對(duì)象默認(rèn)已經(jīng)設(shè)置好了目標(biāo)動(dòng)作對(duì)。當(dāng)用戶點(diǎn)擊對(duì)應(yīng)的按鈕時(shí),包含該對(duì)象的UIViewController對(duì)象就會(huì)收到setEditing:animated:消息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容