全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解iOS页面传值(顺传 逆传)

代理协议传值

顺传

假设A为第一个视图控制器,B为第二个视图控制器

在A中导入B的.h文件

场景:A向B传值

第一步:在B的.h中定义一个content属性

@interface SecondViewController : UIViewController
@property(nonatomic,copy)NSString *contents;
@end

第二步:在点击A中的按钮方法里面给B的content属性赋值

- (void)buttonAction:(UIButton *)button
 {
 NSLog(@"进入第二页");
 SecondViewController *secondVC = [SecondViewController alloc] init];
 secondVC.contents = self.label.text;
 [self.navigationController pushViewController:secondVC animated:YES];
 }

第三部:在B使用content的属性给相应的控件赋值

@implemention SecondViewController
- (void)viewDidLoad {
 [super viewDidLoad];
 self.view.backgroundColor = [UIColor whiteColor];
 self.navigationItem.title = self.contents;
 }

逆传

代理传值使用在两个界面传值的之后,从后向前传值。

假设A为第一个视图控制器,B为第二个视图控制器

场景:B向A传值

第一步:首先在B的.h文件中声明协议和协议方法

第二步在B的.h中声明一个代理属性,这里主要注意用assign或weak修饰,weak和assign是一种非拥有关系的指针,通过这两种修饰符修饰的指针变量,都不会改变被引用的对象的引用计数。但是在一个对象被释放后,weak会自动将指针指向nil,而assign则不会。所以,用weak更安全些。

@property (nonatomic,weak)id<协议名>delegate;

#pragma mark 这里是B的.h
#import<UIKit/UIKit.h>
@protocol CsutomTabBarDelegate<NSObject>
// 把btn的tag传出去的方法
- (void)selectedIndexWithTag:(NSInteger)tag;
@end
@interface CustomTabBarView : UIView
//声明一个代理属性delegate
@property (nonatomic,weak)id<CsutomTabBarDelegate>delegate;
@end

第三部:在B即将POP回前一个界面的时候,在pop方法的上一行使用协议方法传递数据[self.delegate 协议方法名:(参数,也就是要传回的数据)

#pragma mark 这里是B的.m
// 判断在制定的代理类中是否实现了该协议方法
// 确保执行时无此方法时不崩溃
if([self.delegate respondsToSelector:@selector(selectedIndexWithTag:)])
{
 // 执行代理方法
 [self.delegate selectedIndexWithTag:(sender.tag - 1000)];
}
else
{
 NSLog(@"协议中的方法没有实现");
}

在A的.m中,在push到B界面方法之前,B对象的初始化之后,指定A对象为B对象的代理(B对象).delegate = self此时会有黄色警告,因为没有准守协议

#pragma mark A的.m中
// 指定代理,B就是customView
customView .delegate = self;

第五步:在A的延展或者A的.h文件中导入协议名称<协议名称>

#pragma mark A的.m的延展里,A就是RootTabBarController
// 协议导入
@interface RootTabBarController () <CustomTabBarDelegate>
@end

第六步:在A的.m中事项协议方法,取得参数中得知,呈现在当前界面上

#pragma mark A的.m
// 实现代理方法,这里就可以使用从B传来的值了
- (void)selectedIndexWithTag:(NSIngeter)tag
 {
  self.selectedIndex = tag;
 }

使用Block页面间传值

第一步:在B的.h中重定义一个block,用这个重定义的block类型声明一个类的属性这里要注意用copy修饰block属性

#pragma mark B的.h 
#import <UIKit/UIKit.h> 
// block传值 
// 重命名一个有参无返回值的block类型 
typedef void(^passValue)(NSInteger tag); 
@interface CustomTabBarView : UIView 
 //用这个block类型定义一个属性 
@property (nonatomic,copy)passValue passValueTag; 
@end

第二步:在B的.m的返回方法中调用block的方法

#pragma mark B的.m的返回方法中 
//调用block方法 
self.passValueTag(sender.tag - 1000);

第三步:在A的.m中创建B的实例的地方,为B的block属性赋值,也就是说,写好这个block中的内容,类似于给B的某一个属性赋初值

// 设置block内容 
 customView.passValueTag = ^(NSInteger tag) 
 { 
  self.selectedIndex = tag; 
 };

没有引用局部变量的Block内存存储在全局区

引用了局部变量的Block内存存储在栈区

当对Block进行copy操作的时候Block的内存存在堆区

Block的循环引用问题

当Block是self的一个属性的时候

self.circleBlock = ^(){my_self.navigationItem.title = @"Hello";};

会导致self的引用计数+1,最终导致循环引用

在ARC下使用weak修饰变量防止循环引用

在非ARC下使用block修饰变量防止循环引用

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# ios  # 页面传值  # ios页面传值方式  # iOS利用Block逆向传值的方式详解  # iOS通过代理逆向传值的方式详解  # 汇总ios开发逆向传值的方法  # iOS通过block在两个页面间传值的方法  # IOS使用NSUserDefault去实现界面传值和数据存储  # iOS中详解Block作为property属性实现页面之间传值  # iOS(闭包)block传值详解  # iOS中正向、逆向传值的方法总结  # 第二步  # 第一个  # 第二个  # 第三部  # 是一种  # 会有  # 要注意  # 这两种  # 类似于  # 写好  # 第三步  # 前传  # 就可以  # 呈现在  # 重命名  # 无此  # 后向  # 返回值  # 类中  # 也就是说 


相关文章: 如何设计高效校园网站?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  ,巨量百应是干嘛的?  公司网站的制作公司,企业网站制作基本流程有哪些?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  西安大型网站制作公司,西安招聘网站最好的是哪个?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  宝塔新建站点报错如何解决?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  seo网站制作优化,网站SEO优化步骤有哪些?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  如何在宝塔面板中修改默认建站目录?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  如何选择可靠的免备案建站服务器?  如何用低价快速搭建高质量网站?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  宝塔面板如何快速创建新站点?  如何在阿里云ECS服务器部署织梦CMS网站?  常州自助建站费用包含哪些项目?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何快速搭建高效服务器建站系统?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  建站VPS能否同时实现高效与安全翻墙?  企业微网站怎么做,公司网站和公众号有什么区别?  建站之星×万网:智能建站系统+自助建站平台一键生成  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  怎么将XML数据可视化 D3.js加载XML  如何通过服务器快速搭建网站?完整步骤解析  如何快速搭建高效香港服务器网站?  ,购物网站怎么盈利呢?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何将凡科建站内容保存为本地文件?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何高效利用亚马逊云主机搭建企业网站?  如何选择网络建站服务器?高效建站必看指南  MySQL查询结果复制到新表的方法(更新、插入)  简单实现Android文件上传  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  TestNG的testng.xml配置文件怎么写  历史网站制作软件,华为如何找回被删除的网站?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  建站之星如何实现五合一智能建站与营销推广?  建站之星安装后如何自定义网站颜色与字体?  网站企业制作流程,用什么语言做企业网站比较好?  长沙企业网站制作哪家好,长沙水业集团官方网站?  建站上市公司网站建设方案与SEO优化服务定制指南  如何在建站之星绑定自定义域名? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。