-、由主界面A传值给子界面B(属性传值,方法传值)
将A界面UITextField上输入的内容在点击按钮的时候传给B界面中的UITextField
1.属性传值
在B界面间定义一个属性NSString * info,在A中创建B的时候给这个属性赋值,B中的UITextField来显示这个infoA 界面
.h中添加一个属性 @property(nonatomic,retain)UITextField * textField;
.m中-( void)btnAction:( id)sender{SecondViewController * secondViewController = [[SecondViewController alloc ] init ];
[secondViewController setInfo:_textField.text];
[ self presentViewController :secondViewController animated : NO completion :^{}];
[secondViewController release];
}
B 界面
.h中
添加一个属性 @property(nonatomic,retain)NSString * info;
.m中
[textField setText:_info];
2.方法传值
在B界面中添加一个方法-(void)setString:(NSString *)str,A界面创建B界面对象,B对象调用这个方法给NSString * info传值
A 界面
.h中添加一个属性 @property(nonatomic,retain)UITextField * textField;
.m中-( void)btnAction:( id)sender{SecondViewController * secondViewController = [[SecondViewController alloc ] init ];
[secondViewController setString : _textField . text ];
[ self presentViewController :secondViewController animated : NO completion :^{}];
[secondViewController release];}
B 界面
.h中添加一个属性 @property(nonatomic,retain)NSString * info;
.m中
-(void)setString:(NSString *)str
{
self.info = str;
}
[textField setText:_info];
二、由子界面B返回到主界面A时传值
1.协议传值
B界面
.h
//创建一个协议,用来给主界面传值
@protocol SendToFirstDelegate <NSObject>
-(void)setFirstText:(NSString *)str;
@end
//添加一个属性
@property(nonatomic,assign)id<SendToFirstDelegate>delegate; //代理变量
.m
-(void)btnAction:(id)sender
{
[self.delegate setFirstText:_textField.text];
[self dismissViewControllerAnimated:NO completion:^{}];
}
A界面
.h
//包含B界面的头文件,主要时为了遵循协议
#import "SecondViewController.h"
//遵循协议
@interface FirstViewController : UIViewController<SendToFirstDelegate>
.m中
//实现协议
-(void)setFirstText:(NSString *)str
{
[_textField setText:str];
}
2.消息中心传值(通常可以跨几个界面来传值)
注册消息中心
[[NSNotificationCenter defaultCenter]addObserver:(id) selector:(SEL)name:(NSString *) object:(id)];
参数说明:
ObServer 观察者,就是或的消息的对象,一般是self,
selector 获得消息后执行的方法选择器(参数是NSNotification *类型的,我们用它的userInfo的数据)
name 消息中心通信的暗号,需要两边匹配
object 一般为nil代表是公共的消息中心
post一个消息
[[NSNotificationCenter defaultCenter]postNotificationName:(NSString *) object:(id) userInfo:(NSDictionary *)];
参数说明
name 消息中心通信的暗号,需要两边匹配
useerInfo 传回的数据,是一个字典类型的
A界面
.m
//init方法里注册消息中心
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setText:) name:@"IOS" object:Nil];
//添加消息中心响应方法
-(void)setText:(NSNotification *)noti
{
NSDictionary * dic =[noti userInfo];
[_textField setText:[dic objectForKey:@"text"]];
}
B界面
.m
//按钮按下之后通过消息中心将info传给A界面
-(void)btnAction:(id)sender
{
//[self.delegate setFirstText:_textField.text];
NSDictionary * dic = [NSDictionary dictionaryWithObject:_textField forKey:@"text"];
[[NSNotificationCenter defaultCenter]postNotificationName:@"IOS" object:Nil userInfo:dic];
[self dismissViewControllerAnimated:NO completion:^{}];
}