iOS学习笔记-048.UINavigationController——导航控制器

UINavigationController——导航控制器

一、UINavigationController的使用步骤

1. 初始化 UINavigationController        

2. 设置UIWindow的rootViewController为UINavigationController

3. 根据具体情况,通过push方法添加对应个数的子控制器

二、UINavigationController的子控制器

UINavigationController以栈的形式保存子控制器
@property(nonatomic,copy) NSArray *viewControllers;
@property(nonatomic,readonly) NSArray *childViewControllers;


使用push方法能将某个控制器压入栈
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;


使用pop方法可以移除控制器将栈顶的控制器移除
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

回到指定的子控制器
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

回到根控制器(栈底控制器)
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

三、如何修改导航栏的内容

导航栏的内容由栈顶控制器的navigationItem属性决定

UINavigationItem有以下属性影响着导航栏的内容
    左上角的返回按钮
    @property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;

    中间的标题视图
    @property(nonatomic,retain) UIView          *titleView;

    中间的标题文字
    @property(nonatomic,copy)   NSString        *title;

    左上角的视图
    @property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;

    UIBarButtonItem *rightBarButtonItem  右上角的视图
    @property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;

导航栏上的标题是由栈顶控制器决定的,导航栏上的 “返回”是由上一个决定的

-(void)viewDidLoad{
    [super viewDidLoad];
    //第一个控制器的标题显示
    self.navigationItem.title = @"第一个控制器";
    //第二个控制器上显示
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];
}

四、使用UINavigationController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];

    // 1.创建导航控制器
    UINavigationController *nav = [[UINavigationController alloc] init];
    // 2.设置导航控制器为window的根控制器
    self.window.rootViewController = nav;

    // 创建第一个控制器并添加到导航控制器中
    NJOneViewController  *one = [[NJOneViewController  alloc] init];
    [nav pushViewController:one animated:YES];

    /*
    // 3.添加子控制器到导航控制器中
    // 创建一些子控制器
    UIViewController *vc1 = [[UIViewController alloc] init];
    vc1.view.backgroundColor   = [UIColor redColor];

    UIViewController *vc2 = [[UIViewController alloc] init];
    vc2.view.backgroundColor   = [UIColor greenColor];

    UIViewController *vc3 = [[UIViewController alloc] init];
    vc3.view.backgroundColor   = [UIColor purpleColor];

    // 添加子控制器到导航控制器中
    [nav pushViewController:vc1 animated:YES];
    [nav pushViewController:vc2 animated:YES];
    [nav pushViewController:vc3 animated:YES];
     */


    [self.window makeKeyAndVisible];
    return YES;
}

- (IBAction)jump2Two:(id)sender {
    // 1.创建第二个控制器
    NJTwoViewController *two = [[NJTwoViewController alloc] init];
    // 2.将第二个控制器添加到导航控制器中
    // 只要当前控制器是导航控制器的子控制器,就快要通过该属性直接获取到当前控制器所在的导航控制器
    [self.navigationController pushViewController:two animated:YES];
}

五、图示

这里写图片描述

六、使用Storyboard实现的图示

代码能做的,Storyboard不一定都能做,下面的第三个返回到第二个,使用的是代码

- (IBAction)xmBack:(id)sender {
    [self.navigationController popViewControllerAnimated:YES];
}

这里写图片描述

七、生命周期 – 内存警告

这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值