成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

UIKit框架(11)導(dǎo)航控制器UINavigationController

介紹多控制器管理中非常重要的一個(gè)控制器UINavigationController

東源網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

它負(fù)責(zé)管理多個(gè)控制器,能夠輕松完成控制器間的切換

如:iOS系統(tǒng)上的設(shè)置

    UIKit框架(11)導(dǎo)航控制器UINavigationController

父類是UIViewController,但其功能并非是管理view,而是管理多個(gè)控制器

控制器棧式管理: 

     當(dāng)切換時(shí),將一個(gè)控制器入棧,當(dāng)返回時(shí),棧頂控制器出棧

     當(dāng)前顯示的永遠(yuǎn)是棧頂控制器的view,棧結(jié)構(gòu)如下:

@property(nonatomic, copy) NSArray *viewControllers  //管理的所有控制器     
@property(nonatomic, readonly, retain) UIViewController *topViewController //當(dāng)前顯示的控制器

  • 代碼使用導(dǎo)航控制器

導(dǎo)航控制器的創(chuàng)建:

- (instancetype)initWithRootViewController:(UIViewController *)rootViewController

     rootViewController參數(shù):根控制器,即管理的第一個(gè)頁(yè)面

跳轉(zhuǎn)動(dòng)作:

     使用導(dǎo)航控制器的pushViewController方法:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

     也就是說(shuō),跳轉(zhuǎn)動(dòng)作的執(zhí)行者是導(dǎo)航控制器,而不是源控制器

     源控制器可以通過(guò)它的屬性訪問(wèn)到導(dǎo)航控制器:

@property(nonatomic, readonly, retain) UINavigationController*navigationController

     如一個(gè)跳轉(zhuǎn)動(dòng)作:

AMViewController *vc = [[AMViewControllerTwo alloc] init];
[self.navigationController pushViewController:vc animated:YES];

     

返回動(dòng)作:

     非根控制器的導(dǎo)航欄上,都默認(rèn)有一個(gè)返回按鈕,點(diǎn)擊此按鈕能夠自動(dòng)返回

     也可以通過(guò)代碼返回,導(dǎo)航控制器的方法:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated //返回一個(gè)控制器
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated //返回到指定控制器
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated //返回到根控制器

  • storyboard使用導(dǎo)航控制器

     UIKit框架(11)導(dǎo)航控制器UINavigationController

刪除storyboard默認(rèn)的控制器,添加 UINavigationController,并設(shè)置為初始控制器。

     UIKit框架(11)導(dǎo)航控制器UINavigationController

添加一個(gè)控制器,連接導(dǎo)航控制器的root view controller屬性

     UIKit框架(11)導(dǎo)航控制器UINavigationController

控制器間的跳轉(zhuǎn)可以直接連線,選擇show

     UIKit框架(11)導(dǎo)航控制器UINavigationController

     同樣支持自動(dòng)型Segue和手動(dòng)型Segue

     控制器之間傳遞數(shù)據(jù)和modal方式切換一樣

導(dǎo)航欄上按鈕的添加

    導(dǎo)航欄上的按鈕類型是UIBarButtonItem

     UIKit框架(11)導(dǎo)航控制器UINavigationController

     

  • 導(dǎo)航欄

導(dǎo)航控制器除了管理多個(gè)控制器外,還有一個(gè)到導(dǎo)航欄,相關(guān)屬性:

@property(nonatomic, readonly) UINavigationBar *navigationBar  //導(dǎo)航欄
@property(nonatomic, getter=isNavigationBarHidden) BOOL navigationBarHidden //導(dǎo)航欄隱藏使能

導(dǎo)航欄上的數(shù)據(jù)由UINavigationItem對(duì)象管理,其屬性如下:

@property(nonatomic, copy) NSString *title  //中間的標(biāo)題
@property(nonatomic, retain) UIView *titleView //中間的視圖
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem //左側(cè)的返回按鈕
@property(nonatomic, retain) UIBarButtonItem *leftBarButtonItem //左側(cè)自定義按鈕
@property(nonatomic, copy) NSArray *leftBarButtonItems 
@property(nonatomic, retain) UIBarButtonItem *rightBarButtonItem //右側(cè)自定義按鈕
@property(nonatomic, copy) NSArray *rightBarButtonItems

導(dǎo)航欄對(duì)象UINavigationBar管理顯示數(shù)據(jù)的方式和導(dǎo)航控制器管理多個(gè)控制器類似,也是用棧的結(jié)構(gòu):

@property(nonatomic, copy) NSArray *items
@property(nonatomic, readonly, retain) UINavigationItem *topItem

但通常不直接使用導(dǎo)航欄對(duì)象來(lái)設(shè)置顯示的數(shù)據(jù)

UIViewController包含一個(gè)navigationItem屬性:

@property(nonatomic, readonly, retain) UINavigationItem *navigationItem

     通過(guò)這個(gè)屬性,能夠直接設(shè)置當(dāng)前頁(yè)面的導(dǎo)航欄數(shù)據(jù)

  • 工具欄

導(dǎo)航控制器還管理著一個(gè)工具欄,這個(gè)工具欄默認(rèn)是隱藏的

@property(nonatomic, readonly) UIToolbar *toolbar
- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated
@property(nonatomic, getter=isToolbarHidden) BOOL toolbarHidde

    UIKit框架(11)導(dǎo)航控制器UINavigationController

     

工具欄UIToolBar管理方式導(dǎo)航欄UINavigationBar的管理方式類似

UIViewController包含一個(gè)tabBarItem屬性:

@property(nonatomic, readonly, retain) UINavigationItem *navigationItem

     通過(guò)這個(gè)屬性,能夠直接設(shè)置當(dāng)前頁(yè)面的工具欄數(shù)據(jù)

@property(nonatomic, retain) UITabBarItem *tabBarItem

  • 導(dǎo)航控制器子類

定義一個(gè)導(dǎo)航控制器子類的好處是:

     讓項(xiàng)目中所有的導(dǎo)航控制器都遵循統(tǒng)一的一些行為,應(yīng)讓所有的導(dǎo)航控制器為自定義的UINavigationController的子類,在子類中設(shè)定這些統(tǒng)一的行為。

UINavigationBar設(shè)置背景圖片   

- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics

UINavigationBar設(shè)置文字屬性     

@property(nonatomic, copy) NSDictionary *titleTextAttributes

一些控件遵循<UIAppearance>協(xié)議,通過(guò)協(xié)議中的appearance方法能夠返回全局對(duì)象

+ (instancetype)appearance

通過(guò)全局對(duì)象能夠設(shè)置一些全局的特征

設(shè)置導(dǎo)航欄的tintColor

[UINavigationBar appearance].tintColor = [UIColor whiteColor];

設(shè)置導(dǎo)航欄按鈕的字體

[UIBarButtonItem appearance] setTitleTextAttributes:attrDict forState:UIControlStateNormal];

    全局的屬性設(shè)置,執(zhí)行一次即可

    將這些代碼放在導(dǎo)航控制器的viewDidLoad方法中,當(dāng)出現(xiàn)多個(gè)導(dǎo)航控制器時(shí),全局屬性設(shè)置會(huì)執(zhí)行多次。

     保證全局屬性只執(zhí)行一次的方案是添加到initialize方法中

另外可以使用一個(gè)類,管理所有UIKit對(duì)象的appearance的設(shè)置,用以實(shí)現(xiàn)App皮膚的切換

分享文章:UIKit框架(11)導(dǎo)航控制器UINavigationController
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article36/ggessg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)頁(yè)設(shè)計(jì)公司電子商務(wù)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
讷河市| 嫩江县| 东至县| 稻城县| 横峰县| 沐川县| 灵武市| 遂溪县| 青河县| 昌邑市| 剑川县| 疏附县| 太仆寺旗| 邹平县| 马山县| 特克斯县| 桃江县| 景德镇市| 剑河县| 城步| 赤水市| 灌阳县| 绩溪县| 繁昌县| 泰和县| 读书| 沙坪坝区| 田林县| 南安市| 洛隆县| 江永县| 勐海县| 都匀市| 如东县| 阳朔县| 饶阳县| 汶川县| 格尔木市| 涟水县| 泸西县| 满洲里市|