目录:

一、正向传值

二、反向传值

三、代理模式

回到顶部

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

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. C++设计模式实现--组合(Composite)模式

    一. 举例 这个样例是书上的,如果有一个公司的组结结构例如以下: 它的结构非常像一棵树,当中人力资源部和財务部是没有子结点的,详细公司才有子结点. 并且最关健的是,它的每一层结构非常相似. 代码实现例 ...

  2. 【server端学习】修改Apache配置使支持shtml

    主要工作:修改httpd.conf文件[步骤一]去掉下面两行的注释#AddType text/html .shtml #AddOutputFilter INCLUDES .shtml [步骤二]在Op ...

  3. SDWebImage内部实现过程

    入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处 ...

  4. 关于UITableview刷新笔记

    今天在做项目的时候 发现调用tableview 的 reloaddata 方法的时候出现崩溃. - 具体操作是执行某个方法后将数据数组中的某条数据删除(数组中存数组)发现调用刷新方法后 程序崩溃,查看 ...

  5. [html5] canvas 绘图:八卦图

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title&g ...

  6. 分蛋糕(C - 二分查找)

    分蛋糕 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/C Description My birthd ...

  7. LinkNode 温度报警器视频(2016-05-15)

    文档就不发了,申请的时候说要官方首发,所以半个月后,这里就只上一个视频表表心意.

  8. ELF文件数据布局探索(1)

    作为一名Linux小白,第一次看到a.out这个名字,感觉实在是奇怪,搜了一下才知道这是编译器输出的默认可执行文件名 然后vi一下,哇,各种乱码,仔细看看,发现了三个清晰的字符ELF.继续搜索, 第一 ...

  9. Properties的使用

    Properties的各种相对路径,绝对路径的用法 所在包: package com.test.javaAPI.collections; import java.io.File; import jav ...

  10. UNIX网络编程5 POSIX 消息队列

    <mqueue.h> mq_open mq_close mq_unlink mq_getattr/mq_setattr mq_send/mq_receive mq_notify sigwa ...