在ViewController之间传递数据的方法【iOS】

在ViewController之间传递数据的方法有不少,博主这里总结两种最常用的方法给大家:

我们假设有 视图控制器A 和 视图控制器B,其中我们设视图控制器B 是由 视图控制器A通过Navigation controller Push过去的,也就是说视图控制器B是视图控制器A的子视图控制器。

下面我们就分别通过 A->B 和 B->A传递数据说明两种在视图控制器之间传递数据的方法。

1.由视图控制器A传递数据给视图控制器B

  • 这里,我的视图控制器A是 ViewController 视图控制器B是CheckViewController。在Storyboard上面连接视图控制器A和视图控制器B,点击连线,在属性设置窗口设置 segueidentifier. 这里我们将其设置为 MainToCheck.
  • 在CheckViewController.h文件中定义属性_showArray用于接收数据

@property (strong, nonatomic) NSArray *showArray;


  • 在ViewController.m文件中设置- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([[segue identifier] isEqualToString:@"MainToCheck"]) {
        CheckViewController *CheckVC = [segue destinationViewController];
        CheckVC.showArray = [[NSArray alloc] initWithArray:_currentArray];
    }
}


这样就完成了A->B的数据传递

2.由视图控制器B传递数据给视图控制器A

从子视图控制器向父视图控制器传递数据无法利用segue。通常的做法是利用protocol做一个监听器。具体方法如下:

  • 在CheckViewController.h中添加协议(注意添加的位置是在#import和#interface之间):

@class LoadViewController;

@protocol CheckViewDelegate <NSObject>

-(void)LoadDataViewController:(CheckViewController *)controller didFinishLoadData:(NSMutableArray *)loadedArray;

@end


  • 在CheckViewController.h中添加属性 delegate作为监听器。

@property (nonatomic, weak) id <LoadViewDelegate> delegate;


  • 在CheckViewController.m中调用该方法。

[self.delegate LoadDataViewController:self didFinishLoadData:testArray];


  • 在ViewController.h文件中添加协议。
  • 在Push出CheckViewController实例时添加设置监听器

CheckVC.delegate = self;

  • 在ViewController.m文件中实现第三步中的方法。

-(void)LoadDataViewController:(CheckViewController *)controller didFinishLoadData:(NSMutableArray *)loadedArray{
    self.currentArray = loadedArray;
}


这样就完成了B->A的数据传递。相对复杂一些。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值