目录:

一、正向传值

二、反向传值

三、代理模式

回到顶部

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

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. HDU 3032 Nim or not Nim? (sg函数求解)

    Nim or not Nim? Problem Description Nim is a two-player mathematic game of strategy in which players ...

  2. SQL Server调试常用参数

    SQL Server 清除缓存: DBCC DROPCLEANBUFFERS 从缓冲池中删除所有清除缓冲区. DBCC FREEPROCCACHE 从过程缓存中删除所有元素. DBCC FREESYS ...

  3. 高性能网站优化-创建快速响应的Web

    <高性能网站建设进阶指南> 优化原则 优化的目的是希望降低程序的整体开销. 减少开销 通常认为开销就是程序的执行时间.而在进行优化工作时,应该把重点放在对程序开销影响最大的那部分. 假设我 ...

  4. vim插件管理之Vundle

    Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.正是由于其可定制的特性, 许许多多的Vim插件便诞生了.管理这些插件又成为我们最为头疼的问题,最近无 ...

  5. [LeetCode]题解(python):025-Reverse Nodes in k-Group

    题目来源: https://leetcode.com/problems/reverse-nodes-in-k-group/ 题意分析: 这道题目和上一题目类似,输入一个链表和一个整型k.每k个翻转一下 ...

  6. Windows Phone 8初学者开发—第13部分:设置LongListSelector中磁贴的样式

    原文 Windows Phone 8初学者开发—第13部分:设置LongListSelector中磁贴的样式 第13部分:设置LongListSelector中磁贴的样式 原文地址: http://c ...

  7. Ruby学习: 类变量和类方法

    一.类变量 在ruby中,可以为类定义类变量,类变量的值为类的所有实例(对象)所共享. 有点类似其它语言(如java)中的静态变量,但与java中的静态变量的区别是, 类变量是私有的,无法在类的外部访 ...

  8. Trie树:应用于统计和排序

    Trie树:应用于统计和排序 1. 什么是trie树 1.Trie树 (特例结构树)       Trie树,又称单词查找树.字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构 ...

  9. IT第十九天 - 继承、接口、多态、面向对象的编程思想

    IT第十九天 上午 继承 1.一般情况下,子类在继承父类时,会调用父类中的无参构造方法,即默认的构造方法:如果在父类中只写了有参的构造方法,这时如果在子类中继承时,就会出现报错,原因是子类继承父类时无 ...

  10. Android创建启动画面

    每一个Android应用启动之后都会出现一个Splash启动界面,显示产品的LOGO.公司的LOGO或者开发人员信息.假设应用程序启动时间比較长,那么启动界面就是一个非常好的东西,能够让用户耐心等待这 ...