目录:

一、正向传值

二、反向传值

三、代理模式

回到顶部

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

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. Extending your SharePoint 2007 site with Microsoft ASP.NET AJAX 3.5

    After ASP.NET 3.5 has been installed you need to modify the web.config file of your MOSS web site wi ...

  2. js动画学习(三)

    五.多物体变宽 这里面要注意由于物体变多了,需要给每个物体各配备一个定时器,否则如果只有一个定时器的话,当鼠标在不同物体之间快速滑动时,不同的物体就会出现争抢的现象.所以timer前要加obj. fu ...

  3. C#_会员管理系统:开发八(权限分配)

    数据库设计 这里由于增加了普通用户权限值,我们需要对数据库结构稍作修改.这里在MovieAccount表中增加4列内容 分别用于 RightFManager       判断普通用户管理界面权限   ...

  4. Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connectio (andriod sdk manager) http://dl-ssl.google.com/android上不去解决方案

    Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml  Fetched Add-ons List succes ...

  5. Python之路Day18

    今天主要内容:Django Form.Django Admin.Django进阶 Django Admin 自带的验证: Django Admin的定制 Django Admin 自定义actions ...

  6. Windows Azure 社区新闻综述(#76 版)

    欢迎查看最新版本的每周综述,其中包含有关云计算和 Windows Azure 的社区推动新闻.内容和对话.以下是本周的亮点. 文章.视频和博客文章 ·   更新 Windows Azure 中的 SQ ...

  7. FMDB的基本应用

    FMDB简介 iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较频繁.于是,就出现了一系列将AQLite API进行封装的库,例如FMDB.PlausibleDa ...

  8. Binary Tree(二叉树+思维)

    Binary Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tota ...

  9. Apache JMeter - load test tool

    What is it? ->>>> http://jmeter.apache.org/index.html  (Please read!) Where to get it? - ...

  10. 【转】 /etc/fstab功能详解

    [转] /etc/fstab功能详解 最近去客户现场时,遇到 了一个关于挂载文件/etc/fstab文件的问题,就写了一下/etc/fstab文件的作用一个文件中各个参数的含义.供大家参考有不正确的地 ...