IOS NavigationController toolbar(工具栏);子控制器间数据的传递

toolbar(工具栏)

navigtionbar是显示在最上面的,但是toolbar是显示在屏幕的最下面的,默认情况下,toolbar是不显示的,并不是所有的应用都需要toolbar,新闻类的app比较常用。
在这里插入图片描述
在这里插入图片描述
导航控制器中toolBar是只读属性,没办法对他进行直接的定制,只有在初始化navigationController的时候,去指定一个自定义的toolbar.
toolbar上的按钮是UIBarbutton类型的。
第一个页面不显示toolbar,第二个页面显示toolbar,因为是一个navigationController,所以要在第一个页面的viewWillAppear里,把toolbar隐藏。
代码:https://github.com/ShaeZhuJiu/navigationbar-toolbar.git

子控制器间数据的传递

如何在navigationController和控制的子控制器之间进行数据的传递。实际开发中使用很频繁。

概念定义

在导航控制器管理的子控制器之间传递数据时,有如下概念需要了解。
源控制器:调用pushViewController方法的控制器。
目标控制器:调用pushViewController方法后,展示出来的新控制器。
顺传:源控制器向目标控制器传递数据
逆传:目标控制器向源控制器传递数据。

顺传

顺传数据的核心思路时在目标控制器中,新增一个属性,在pushViewController:方法之前,把源控制器中的数据传递给改属性,常步骤:

逆传

当目标控制器需要向源控制器传递数据时,可以使用代理(一对一)或者通知(一对多),以代理为例,delegate协议。

例子

在这里插入图片描述
在这里插入图片描述
顺传:源控制器在初始化目标控制器和跳转之间传值,目标控制器在viewDidLoad中更新。
逆传:目标控制器中声明代理,和传参,源控制器中设置定义代理方法。

//
//  RootViewController.m
//  1NaviVC
//
//  Created byon 2019/6/25.
//  Copyright © 2019 Shae. All rights reserved.
//

#import "RootViewController.h"
#import "DetailViewController.h"
@interface RootViewController ()<DetailViewControllerDelegate>
@property (weak, nonatomic) IBOutlet UITextField *rootTextField;

@end

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title=@"RootVC";
}

- (IBAction)changeVC:(UIButton *)sender {
    //初始化目标控制器
    UIStoryboard *storyBoard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
    DetailViewController *detailVC=[storyBoard instantiateViewControllerWithIdentifier:@"DetailViewController"];
    //传值
    detailVC.text=self.rootTextField.text;
    //设置代理
    detailVC.delegate=self;
    //执行跳转
    [self.navigationController pushViewController:detailVC animated:YES];
    
}
- (void)detailViewController:(DetailViewController *)detailViewController returnRootVcWithNewString:(NSString *)string{
    self.rootTextField.text=string;
}

@end

//
//  DetailViewController.m
//  1NaviVC
//
//  Created by  on 2019/6/25.
//  Copyright © 2019 Shae. All rights reserved.
//

#import "DetailViewController.h"

@interface DetailViewController ()
@property (weak, nonatomic) IBOutlet UITextField *DetailFIeld;

@end

@implementation DetailViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 更新textField
    self.DetailFIeld.text=self.text;
}
- (IBAction)returnRootVc:(UIButton *)sender {
    //通知代理工作
    if([self.delegate respondsToSelector:@selector(detailViewController:returnRootVcWithNewString:)]){
        [self.delegate detailViewController:self returnRootVcWithNewString:self.DetailFIeld.text];
    }
    [self.navigationController popViewControllerAnimated:YES];
}


@end

代码:https://github.com/ShaeZhuJiu/navigationController-.git

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值