目录:字体
1、正向传值spa
2、反向传值代理
3、代理模式ip
回到顶部内存
正向传值:就是把第一个界面的值传给第二个界面显示,其简单实现方法it
1 首先在第一个界面中要有一个textField输入框,一个按钮button,第二个界面至少有一个要显示该值的标签lable,并附带一个back按钮。io
2 在第一个界面.m文件中拉一个button按钮的方法,这个方法实现了接收textField文本框的值,并赋值给第二个界面的一个公开属性,假设是message(之因此要一个公开属性,由于语法规定不能直接访问第二个界面里面的控件),而后跳转到第二个界面。循环
3 在第二个界面中的lable控件经过访问message属性获取值。该赋值写在一个叫viewDidLoad 方法中,这是由于这个方法在进入第二个界面时会自动执行。记住:这个方法在view建立的时候只执行一次。语法
- (IBAction)sendMassage:(UIButton *)sender {
//建立第二个VC
MXsceondViewController* sceondViewController = [[MXsceondViewController alloc]initWithNibName:@"MXsceondViewController" bundle:nil];
//设置翻动到第二个VC特效
sceondViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
//传text的值到第二个VC中的公开属性message 规定不能直接访问第二个VC中的label
sceondViewController.message = self.sendField2.text;
//跳转到建立好的VC界面
[self presentViewController:sceondViewController animated:YES completion:nil];
}引用
反向传值:就是点击第一个界面的一个button按钮,跳转到第二个界面,而后把第二个界面的值传回第一个界面并显示,其简单实现方法
1 首先在第一个界面中有一个button按钮,有一个接收值的label标签,第二个界面有一个textField文本框,一个button按钮。
2 在第一个界面.m文件中拉一个button按钮的方法,这个方法实现了把本身self赋值给第二个界面建立的公开属性(这个属性其实就是第一个界面的一个引用),为何要这么作呢,是为了在第二个界面中能访问第一个界面的属性或方法,固然包括修改其lable控件内容。而后就跳转到第二个界面中
3 在第二个界面的.m文件中拉一个button按钮的方法,该方法实现了把textField文本框的值传给第一个界面的lable标签, 并返回第一个界面。
4 而在第一个界面中这么接收这个值写在哪里好呢,系统提供了一个viewWillAppear方法,把赋值语句写在这里边就行了,这个方法的意思只要显示界面就会调用这个方法,和viewDidLoad的不一样之处就在这一点。
- (IBAction)didGetUserMessage:(UIButton *)sender {
self.firstViewCtroller.userInputMessage = self.textField.text;
//执行完这句话会调用dealloc,释放掉MXSecondViewController
[self dismissViewControllerAnimated:YES completion:nil];
}
反向引用注意事项
1 第二个界面中指向第一个界面的属性应该是weak,以防止内存的循环引用
2 比较适合简单的传值,若是两个VC的关系很是紧密时使用
代理(委托)模式:在反向传值中咱们知道第二个界面(委托方)能够返回值给第一个界面,那么若是有不少这样像第一个界面同样须要从委托方获得本身须要的值,咱们知道在委托方咱们有一个属性能够接收一个固定界面的属性,那么若是有多个呢,咱们不能写多个这样的属性吧,这样显然不合适,这里咱们就须要用到协议这样一个方法来解决这样的问题,具体作法以下
1 有四个界面,第一个界面有两个button指向第二和第三界面,而第二和第三界面中都有一个button和一个lable,这个button点击以后跳转到第四个界面,第四个界面有一个textField文本框和一个button,点击第四个界面的button以后把textField的值传回第二或第三界面显示在lable中(这个是根据经过谁来到第四个界面的)
2 在第四个界面(委托方)定义一个协议并写一个方法,这个方法就是传值的,还有一个协议属性,用来接收不一样的界面引用。
3 在第二第三界面中要遵照这个协议并实现方法,这个方法就是接收值的,这两个界面的button方法以及接收值和反向传值是同样的。
做业:星座运程App,反向传值,必须使用委托,第一个界面有一个按钮,有一个label显示当前星座今年的运程,按钮按下后进入另外一个选择星座的界面。
做业:第一个界面有一个按钮(建立文本),一个lable,第二个界面有x:【坐标】,y:【坐标】,width【宽度】height【高度】肯定按钮,text【文本内容】点击肯定按钮后界面回到第一界面显示,根据数据决定大笑宽高,让用户选择lable字体颜色,颜色是个按钮