IOS开发笔记(2)页面之间传递数据几种方式比较

今天分享一下页面之间传值的几种方式

1、@property属性

这个不用多说了吧,当页面A 跳转到页面B,在class B中声明属性

@property (nonatomic, copy) NSString *name;  

初始化B

FirstViewController *firstVC = [FirstViewController new];
firstVC.name = @"name";
[self presentViewController:firstVC animated:YES completion:nil];

2、Delegate

当页面A 跳转到页面B,B页面返回时传值给A,可以这样实现,在class B中定义一个@protocol,并声明属性delegate;

#import <UIKit/UIKit.h>

@protocol FirstViewControllerDelegate <NSObject>

- (void)print;

@end

@interface FirstViewController : UIViewController

@property (nonatomic, assign) id<FirstViewControllerDelegate> delegate;

@end
.m文件
- (void)backClick:(UIButton *)sender
{
    [self dismissViewControllerAnimated:YES completion:^{
        
        if ([self.delegate respondsToSelector:@selector(print)]) {
            [self.delegate print];
        }
    }];
}
页面A .m实现,要继承FirstViewController的代理

- (void)buttonClicked:(UIButton *)sender
{
    FirstViewController *firstVC = [FirstViewController new];
    firstVC.delegate = self;
    [self presentViewController:firstVC animated:YES completion:nil];
}

#pragma mark - FirstViewControllerDelegate
- (void)print
{
    NSLog(@"delegate response");
}

3、Block

当页面A 跳转到页面B,B页面返回时传值给A,可以这样实现,在class B中定义一个block,并声明属性block

#import <UIKit/UIKit.h>

typedef void (^FirstViewControllerBlock)(NSString *str);

@interface FirstViewController : UIViewController

@property (nonatomic, copy) FirstViewControllerBlock block;

@end
.m文件

- (void)backClick:(UIButton *)sender
{
    self.block(@"first block");
    [self dismissViewControllerAnimated:YES completion:nil];
}
页面A .m实现

- (void)buttonClicked:(UIButton *)sender
{
    FirstViewController *firstVC = [FirstViewController new];
    [self presentViewController:firstVC animated:YES completion:nil];
    firstVC.block = ^(NSString *str) {
        NSLog(@"str is: %@", str);
    };
}

4、NSNotification

(未完,待续。。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值