AB界面间的传值方法

本文介绍了在iOS应用中,不同界面之间数据传递的几种常见方法,包括属性传值、代理传值、Block传值以及利用通知中心进行通信。详细阐述了每种方法的实现步骤和应用场景,为开发者提供了灵活的数据交互解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 .属性传值

适用于A传给B

注:如果A给B传一个字符串String那么B对应就需要有一个接受的容器,这个容器就是属性.所以步骤如下:

(1)在B.h中建立一个接受的属性(数组,字典,model同理)

@property(nonatomic,copy)NSString *myString;

(2)在A.m中将需要传送的值传给B,(那么在A中就必须要引B的头文件,并且要创建B的对象,否则没有对象A 会不知道传给谁);

BViewController *bVC =[ [BViewController alloc]init];

bVC.myString = @"小光";(由于B中有string这个属性,这列建立了B的对象之后直接用就可以了)

(3)在B.m中使用从A传过来的值

self.navigationItem.title = self.myString;


适用于从B到A的传值方法:

1.代理传值

(1)在B.h中声明协议(协议中带方法)

@protocol doSomething<NSObject>

-(void)doIt:(NSString *)text;

(2)在B.h中声明代理人

@property(nonatomic,assign)id<doSomething>myDelegate;

(3)在B.m中声明代理人的执行方法

[self.myDelegate doIt:self.myText.text];

(4)在A.h中签订B方法的代理协议

(5)在A.h中成为代理人

BViewController *bVC = [[BViewController alloc]init];

bVC.myDelegate = self;


2.Block 传值

注释:用Block传值首先要有这个属性

(1.)在B.h中建立属性

@property(nonatomic,copy)void (^myBlock)(NSString *string);

(2.)在B.m中的按钮方法传值

self.myBlock(self.myText.text);//这里的self.myText.tex就相当于string,后面传到了A里的label.text

(3)在A.m中的按钮方法传值

BViewController *bVC = [[BViewController alloc]init];

__block AViewController *root = self;

bVC.myBlock = ^(NSString *string){

root.myLabel.text = string;

}


3.通知中心

(1)在A.m中注册一个通知(用来接收B传过来的消息,从而达到在B界面可以改变A的目的)

(viewDidLoad)--

 //参数name:是消息通知的标示符,只有发送者跟接受者的name参数一样,接受者才能接受到发送者的消息

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeColor:) name:@"changeColor" object:nil];

 (2)在B.m中发送通知消息

button点击方法--

[[NSNotificationCenter defaultCenter]postNotificationName:@"changeColor" object:[UIColor yellowColor]];


(3)给个changeColor的方法

-(void)changeColor:(NSNotification *)noti{

    self.view.backgroundColor = [[noti object]firstObject];


}


(4)移除通知(我们在MRC下写通知中心的主要目的就是在这里移除,不让通知占内存)


-(void)dealloc{

#warning 通知中心第四步:移除通知(改成mrc的目的就是为了移除,移除原因:多了占内存)

    [[NSNotificationCenter defaultCenter]removeObserver:self name:@"changeColor" object:nil];

    [super dealloc];


}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值