代码块反向传值以及反向处理UI
来源:互联网 发布:内核优化 编辑:程序博客网 时间:2024/06/15 17:37
我们在实现功能的时候,常常会遇到从一个页面A跳转到页面B,然后在页面B进行一些交互以及处理等,之后可能会把处理得到的一些数据反传给A使用,并且可以通过在页面B的一些操作把页面A的UI也进行调整,这时候就可以用到代理(即委托)或者代码块了。
因为上一篇对代码块做了简单的介绍,所以这次就用代码块来实现这一功能:
首先,我们先建造两个继承自UIViewController的类
MainViewController(工程的主页面)和FuZhuViewController(主页面推向的下一级页面)
下面开始处理了
1,把FuZhuViewController.h导入MainViewController中
2,在FuZhuViewController.h中新定义一个代码块类型,用新定义的代码块类型声明一个属性,然后定义一个实例化方法,具体代码如下:
#import <UIKit/UIKit.h>//自定义代码块类型typedef void(^MyBlock)(NSString *str);@interface FuZhuViewController : UIViewController//用定义的代码块类型声明一个属性@property (strong,nonatomic) MyBlock block;//自己写得实例方法-(FuZhuViewController*)initWithBlock:(MyBlock)block;@end
3.在FuZhuViewController.m中实现实例化方法
//自己定义的实例化方法-(FuZhuViewController*)initWithBlock:(MyBlock)block{ if (self=[super init]) { //这样,self.block代码块可以在本类的任意地方调用 self.block=block; } return self;}
4.在FuZhuViewController.m实现一个方法来调用self.block块,self.block块可以在本类的任意地方调用,所以你可以放心的执行各种操作,操作完成后可以再调用这个self.block块,这里就简单额加一个按钮来调用一下作为演示;
在FuZhuViewController.m中写上如下代码:
- (void)viewDidLoad{ [super viewDidLoad]; UIButton *myButton=[UIButton buttonWithType:UIButtonTypeCustom]; [myButton setTitle:@"传值" forState:UIControlStateNormal]; [myButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; myButton.frame=CGRectMake(100, 400, 50, 50); [myButton addTarget:self action:@selector(myButtonAction) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:myButton];}-(void)myButtonAction{ NSString *str=@"路飞赢了"; self.block(str); [self.navigationController popViewControllerAnimated:NO];}
这里的self.block(str)的行为主体是在MainViewController中实现的,所以这里可以给行为主体传参数,也可以在行为主体中根据参数改变MainViewController界面的UI
5,简单的在MainViewController.m中添加一个按钮来调用一个方法,实现跳转到FuZhuViewController页面并在方法中实现MyBlock的行为主体,
代码如下:
- (void)viewDidLoad{ [super viewDidLoad]; UIButton *myButton=[UIButton buttonWithType:UIButtonTypeCustom]; [myButton setTitle:@"下一页" forState:UIControlStateNormal]; [myButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; myButton.frame=CGRectMake(100, 400, 100, 50); [myButton addTarget:self action:@selector(myButtonAction) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:myButton];}-(void)myButtonAction{ //用自己写的方法实例化 FuZhuViewController *fuZhu=[[FuZhuViewController alloc]initWithBlock:^(NSString *str) { //这里接收到参数之后可以随意处理,也可以根据参数来处理本页面的UI NSLog(@"值传过来了,是:%@,可以改变UI或者做其他操作",str); }]; [self.navigationController pushViewController:fuZhu animated:NO];}
至此,基本就完成了整个过程,可能看上去有点麻烦,其实用起来非常方便,也很顺手。
0 0
- 代码块反向传值以及反向处理UI
- 21、UINavigationController(反向传值)-UI+OC
- 关于iOS的UI界面反向传值方法总结
- ios block用代码块反向传值最简单
- cocos2dx反向传值
- 正向反向传值
- 代理反向传值
- iOS 反向传值
- android_44_activity反向传值
- 协议、反向传值
- SSH以及反向连接
- 反向传播matlab代码
- UIViewController 正向,反向传值
- Block传值 反向传值
- ios UIViewController 反向传值
- iOS---block反向传值
- iOS 代理反向传值
- iOS block反向传值
- Jasper Report export Excel properties
- Linux软中断原理浅析
- 流的去读
- linux内核内存管理中的pagevec结构体
- Linux 安装php环境
- 代码块反向传值以及反向处理UI
- MYEclipse 不能加载tomcat
- SQL SERVER 2005如何建立自动备份的维护计划
- 多线程环境下 java.io.IOException: Mark has been invalidated.
- 新的三种EBS类型解析
- VC6.0 error LNK2001: unresolved external symbol _main解决办法
- (一)EJB.JPA jpa概述
- Qt环境配置
- Java 多线程断点下载文件