目录:

一、正向传值

二、反向传值

三、代理模式

回到顶部

正向传值:就是把第一个界面的值传给第二个界面显示,其简单实现方法

1 首先在第一个界面中要有一个textField输入框,一个按钮button,第二个界面至少有一个要显示该值的标签lable,并附带一个back按钮。

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字体颜色,颜色是个按钮

03-UIKit、VC之间正向反向传值、代理的更多相关文章

  1. 使用block进行界面之间的反向传值

    目标:在两个独立的控制器的界面之间进行反向传值 关键技术:block 代码编写及运行环境:Xcode6.4 / 模拟器8.4 语言:Objective-C 注:使用纯代码实现,不使用xib/story ...

  2. 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

    实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...

  3. 【05】Nginx:TCP / 正向 / 反向代理 / 负载均衡

    写在前面的话 在我们日常的工作中,不可能所有的服务都是简单的 HTML 静态网页,nginx 作为轻量级的 WEB 服务器,其实我们将它用于更多的地方还是作为我们网站的入口.不管你是后端接口,还是前端 ...

  4. iOS 代理反向传值

    在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的 ...

  5. OC10_代理反向传值

    // // ProtectedDelegate.h // OC10_代理反向传值 // // Created by zhangxueming on 15/6/24. // Copyright (c) ...

  6. 代理和block反向传值

    代理传值: // SendViewController.h #import <UIKit/UIKit.h> @protocol SendInFor <NSObject> -(v ...

  7. iOS-代理反向传值<转>

    在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的 ...

  8. [ios][swift]使用swift闭包进行viewcontroller反向传值

    闭包参考:http://c.biancheng.net/cpp/html/2285.html   闭包详解 传值参考:http://www.tuicool.com/articles/vy2uUz Sw ...

  9. Swift利用闭包(closure)来实现传值--&gt;前后两个控制器的反向传值

    利用了大约一个多小时来搞明确OC中Blocks反向传值和Swift中Closure反向传值的区别,以下直接贴上代码: 一.第一个界面 // Created by 秦志伟 on 14-6-13. imp ...

随机推荐

  1. 「OC」点语法和成员变量的作用域

    一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObje ...

  2. JavaSE学习总结第04天_Java基础语法3

      04.01 选择结构switch语句的格式及其解释 switch语句的格式: switch(表达式) {    case 值1:语句体1;break;    case 值2:语句体2;break; ...

  3. 2351: [BeiJing2011]Matrix( hash )

    hash一下, 把原矩阵所有A*B的子矩阵的hash值存在set里面, 然后对于每个询问就求出hash值, 在set中查找. ------------------------------------- ...

  4. TCP粘包和半包的处理方法

    先把处理的方法的代码放这里: 解析数据帧的代码: bool CSocket::findData(byte* buff, int& len) { for (int i = 0; i <= ...

  5. (Problem 35)Circular primes

    The number, 197, is called a circular prime because all rotations of the digits: 197, 971, and 719, ...

  6. FPGA知识大梳理(三)verilogHDL语法入门(2)知识汇总

    1,时序逻辑.将上次的练习修改成时序逻辑会如何设计. always @ (posedge clock) 2,block 与unblocking  A,有clock的always中通常使用nonbloc ...

  7. position relative和absolute区别

    看这个博客 说的很详细http://blog.sina.com.cn/s/blog_647a022e0101b2gn.html 总的来说 这两个属性都是通过增加left和right偏离原来的位置  但 ...

  8. QStringLiteral的两篇外文解释(编译期转换成QString)

    http://blog.qt.io/blog/2014/06/13/qt-weekly-13-qstringliteral/ https://woboq.com/blog/qstringliteral ...

  9. elk 搭建

    elk 平台搭建: ELK平台搭建 系统环境 System: Centos release 6.7 (Final) ElasticSearch: 2.1.0 Logstash: 2.1.1 Kiban ...

  10. Vijos P1680距离

    题目 背景 简单的DP 描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“ab ...