文档章节

iOS页面传值总结

Marginx
 Marginx
发布于 2015/09/28 00:19
字数 590
阅读 301
收藏 3
  1. 从最简单的页面跳转开始说起, FirstViewController -----> SecondViewController

方法:直接在跳转处直接给第二个控制器的属性赋值

// FirstViewController.m
// ...
SecondViewController *sec = [SecondViewController new];
sec.backgroundColor = [UIColor RedColor];   // 直接给SecondViewController属性赋值
sec.delegate = self;                        // 第二种情形使用
[self.navigationController pushViewController:sec animation:YES completion:nil];   // 跳转
// ...

2.   比上面稍微复杂的跳转 ,  FirstViewController -------> SecondViewController -------->FirstViewController

实现功能:FirstViewController 通过某个动作(比如点击按钮) push到SecondViewController中,当SecondViewController 返回的时候,在FirstViewController上的label上显示从SecondViewController中传过来的一个字符串(@“info”)

 方法1:通过委托delegate的方法实现  (委托方、代理方、协议)

// SecondViewController.h

// step 1 : 创建一个代理(delegate)
@protocol secondViewDelegate
- (void)showInfo:(NSString *)info;
@end 


@interfacr SecondViewController : UIViewController

// step 2 : (委托方)声明一个代理
@property (nonatomic , weak) id<secondViewDelegate>delegate;  // weak 是亮点,是为了防止循环引用
@end
// SecondViewController.m

- (void)viewWillBackToFirstView{

// step 3 : (委托方)调用delegate方法
    [_delegate showInfo:@"info"];
    [self.navigationController popViewController];
}
// FirstViewController.m

SecondViewController *sec = [SecondViewController new];

// step 4 : (代理方)设置delegate,以便被委托方调用
sec.delegate = self;                      
[self.navigationController pushViewController:sec animation:YES completion:nil]; 

// step 5 : (代理方)实现协议
- (void)showInfo:(NSString *)info{
    self.label.text = info;   // 把委托方传过来的字符串显示在界面上
}
  • 代理试用的3个主体:delegate、委托者、代理者

  • 代理使用的5个一般步骤

  1. 【用@protocol...@end】            创建一个delegate

  2. 【委托者用@property ~~】         声明一个delegate属性

  3. 【委托者用 [_delegate ~~] 】     调用delegate内的方法

  4. 【代理者用 ~~.delegate = self】 设置delegate,以便委托者调用(步骤3)

  5. 【代理者】                                实现delegate方法

  •  总结:delegate实现了不同视图之间的数据交互;delegate属于时间驱动范畴,只有当某一时间触发是,delegate才被调用

方法2:通过block方式实现

// SecondViewController
typedef void (^ablock)(NSString *str);

// step 1: 在SecondViewController中,声明一个block属性,参数为字符串 <------>对比委托方声明一个代理
@property (nonatomic,copy) ablock block;
// @property (nonatomic , weak) id<secondViewDelegate>delegate;

//  step 2: 在SecondViewController中,调用block <--------> 对比委托方调用delegate方法
self.block(@"info");
// [_delegate showInfo:@"info"];
// [self.navigationController popViewController];
// FirstViewController.h

// step 3: 在FirstViewController中,回掉block <----------> 对比代理方实现delegate方法
[self.navigationController pushViewController:sec animation:YES completion:nil];
sec.block = ^(NSString *info){
    self.label.text = info
     };
// sec.delegate = self;                      
// [self.navigationController pushViewController:sec animation:YES completion:nil];

关于block的讲解:有一篇不错的文章http://my.oschina.net/leejan97/blog/268536,讲的很透彻




© 著作权归作者所有

Marginx
粉丝 4
博文 17
码字总数 19301
作品 0
深圳
私信 提问
ReactNative与iOS原生交互方式汇总

前言 最近用RN开发SDK,涉及RN与iOS各种交互。 有些交互比如用iOS原生切换多个RN页面,以及iOS调用RN的方法,按照网上的方法调不通,一度不知如何是好,网上资料比较少。 于是自己看RN源码分...

大灰狼的小绵羊哥哥
2018/11/13
0
0
Vue项目history模式下微信分享总结

每回遇到微信分享都是一个坑,目前的商城项目使用Vue开发,采用history的路由模式,配置微信分享又遇到了很多问题,最后终于解决了,现将解决的过程分享一下。 原文justyeh.top/post/39 技术...

justyeh
03/31
0
0
迈绝伦团队工作汇总

项目负责人:余志恒 up_java后台:暂无更新 mz_java后台:修复获取商品交易信息接口排序问题 bwk后台:暂无更新 项目负责人:季景胜 up_Android:暂无更新 upzg_Android:暂无更新 mzqk_And...

风化的骆驼
2016/12/12
3
0
Vue开发微信H5 微信分享签名失败问题解决方案

关于Vue中路由使用history模式,开发微信H5页面分享时在安卓上签名有效成功,但是在IOS设备上一直报错签名失效问题 问题描述:在Vue开发过程中,路由使用History模式下,在使用微信分享时,在...

golddemon
2018/08/08
0
0
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
173
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
10
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部