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];
}