Tseng的挨踢生涯

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

UINavigationController学习笔记【ARC】(一)

前言:

  最近一直在学习iOS开发,照着无线互联iOS开发视频学习,慢慢摸索中(视频地址:http://www.iphonetrain.com/video_info/267.html)。这套视频还算不错,比较适合初学者。主讲人是用纯代码来构建UI界面,相较于斯坦福大学的iOS公开课,我还是觉得用代码入门比较好,因为这样更有助于理解UIKIT的整个框架。目前自己学到UINavigationController部分,参照视频内容,记下笔记,方便以后查阅,毕竟好记性不如烂笔头嘛。好了,废话不多说,进入正题。

 

一、UINavigationController简介

  按照视频中所讲,UINavigationController俗称“导航控制器”,算是iOS开发中用的最多的一类控制器了吧。控制器的效果如下图:

UIKit类图继承关系如下:

当然还有这张最经典的官方的层次图:

导航控制器采用栈来管理VC,也就是遵循“后进先出”的管理方式。

二、导航控制器常使用的几个方法

导航控制器有几个比较常用的方法,分别如下:

1.初始化

导航控制器常用的初始化方法是

UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:vc];看方法的字面意思,就是把一个定义好的VC作为UINavigationController的rootViewController来初始化。所以在实际场景的应用如下

在AppDelegate.m文件中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    BaseViewController *baseController = [[BaseViewController alloc] init];//自定义的vc
    UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:baseController];//初始化
    self.window.rootViewController = navigation;//作为window的rootViewController
    
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

 2.ViewController入栈(push)

VC入栈,也就是app中跳转到下一个画面的过程。导航控制器常用的push方法为

[self.navigationController pushViewController:thdVC animated:YES];

 所以实际应用场景为

- (void)pushVC{
    ThirdViewController *thdVC = [[ThirdViewController alloc] init];//定义一个VC
    [self.navigationController pushViewController:thdVC animated:YES];//push这个VC并跳转
}

 3.ViewController出栈(pop)

VC出栈有三种常用的方法,分别为

- (void)pop{//往上一层VC跳转
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)root{//跳转到根VC
    [self.navigationController popToRootViewControllerAnimated:YES];
}

- (void)index{//跳转到指定的VC
    UIViewController *vc = [[self.navigationController viewControllers] objectAtIndex:1];
    [self.navigationController popToViewController:vc animated:YES];
}

 这里需要注意的是,这三个方法pop出栈的时候,都会导致当前的VC dealloc。根据测试来看,popToRootViewControllerAnimated会dealloc除了rootVC之外的所有VC;popToViewController方法会dealloc跳转后的VC之后的VC。两种方法执行的dealloc按照的是“先进先出”的模式,并不是栈的“后进先出”。

4.隐藏或显示toolbar和navigationbar

navigationbar是上部导航栏,toolbar是下部工具栏。toolbar默认不显示。

[self.navigationController setNavigationBarHidden:YES animated:YES];//隐藏navigation bar
[self.navigationController setToolbarHidden:NO animated:YES];//显示toolbar

5.设置navigationbar的标题

navigationbar的标题设定比较简单,用self.title = @"root"方法即可设置。设置后的效果如下:

                                                       

由上图可知,设置self.title后,当前VC的navigationbar的title会变化。相应的,当前vc push到下一个vc时,下一个vc的返回按钮的title会自动设置为上一个vc的title

当然,还有代码的方式,自定义返回按钮,简单的定义如下

UIBarButtonItem *backBtn = [[UIBarButtonItem alloc]init];
backBtn.title = @"返回";
self.navigationItem.backBarButtonItem = backBtn;

 还有这种方式,直接修改当前vc的返回按钮的title

self.navigationItem.backBarButtonItem.title = @"xx";

 ok,先记到这儿吧

posted on 2014-10-12 15:01  Tseng的挨踢生涯  阅读(287)  评论(0)    收藏  举报