ios之反向传值
来源:互联网 发布:西语记单词软件 编辑:程序博客网 时间:2024/05/29 08:38
首先声明反向传值有很多种,适合你的项目就是最好的。本博客一直更新
就是在二个界面把值传给单例,然后在第一个界面获取单例值
反向传值方式:
1.单例传值(可以和通知中心配合使用,看自己项目需求)
UIAPPlication单例传值(自定义传值)
第一步
#import "AppDelegate.h"文件中添加自定义的全局变量
@property (nonatomic,strong)NSString *string;
第二步
在第一个界面直接上代码
//界面将要显示的时候
- (void)viewWillAppear:(BOOL)animated {
[superviewWillAppear:animated];
//将要显示的时候从单例中获取值
AppDelegate *appDelegate = (AppDelegate *)[UIApplicationsharedApplication].delegate;
//修改值
userPhone = appDelegate.string;
}
第三步
还是直接上代码
-(void)loginBtnAction:(UIButton *)sender{
[selfupdateData];
AppDelegate *appDelegate = (AppDelegate *)[UIApplicationsharedApplication].delegate;
//传值把值赋给appDelegate的属性
appDelegate.string =self.userTextField.text;
第二种通知中心反向传值
第一步在接受通知的ViewController注册通知
- (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test) name:@"test" object:nil];}
第二步实现通知方法- (void)test:(id)sender{ NSLog(@"接受通知");}
第三步在NavigationController进入的界面发出通知,可以sender打印出来的是那个值得指针地址- (void)didButtonClicked:(id)sender{ [[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:nil];}
第三种反向传值观察者监听方式,由A界面跳B界面,拿到B界面数据返回A界面显示出来数据使用的是模态视图,不能像代理那样使用按钮触发响应,因为模态视图返回后就被销毁了,然而观察者还在,那样内存会出现错误
第一步在A界面ViewDidLoad中定义一个观察者
//a) 初始化模态视图_modalViewController = [[ModalViewController alloc] init];//b) 给模态视图定义一个观察者[_modalViewController addObserver:self forKeyPath:@"textLabel" options:NSKeyValueObservingOptionNew context:nil];
第二步在B界面定义一个观察者公共属性,观察值的变化@property(nonatomic, copy) NSString *textLabel;
第三步修改Button里面的响应方法
//1) 取值UITextField *textField = (UITextField *)[self.view viewWithTag:2000];//2) 修改值self.textLabel = textField.text;//3) 关闭模态视图[self dismissViewControllerAnimated:YES completion:nil];
第四步回到A界面,显示数据#pragma mark - 观察者响应- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context { //1) 获取值得变化 NSString *text = [change objectForKey:@"new"]; //2) 通过tage获取label UILabel *label = (UILabel *) [self.view viewWithTag:1000]; //3) 改变label的值 label.text = text;}
第五步移除观察者- (void) dealloc { [_modalViewController removeObserver:self forKeyPath:@"textLabel"]; }
第四种定义代理实现委托行为- ios之反向传值
- iOS 反向传值
- ios中控制器之间的反向传值之---Block
- IOS学习之——Block反向传值
- ios UIViewController 反向传值
- iOS---block反向传值
- iOS 代理反向传值
- iOS block反向传值
- iOS 代理反向传值
- IOS代理反向传值
- iOS 代理反向传值
- iOS 代理反向传值
- iOS ---反向传值 协议传值
- ios 得用代理反向传值
- iOS简单代理反向传值
- ios反向传值--代理协议
- iOS block/闭包回调( 反向传值 )
- ios中控制器之间的反向传值之二---代理传值
- bzoj 2275 Fibonacci博弈 齐肯多夫定理
- 录入学生信息排序fwrite fread 冒泡
- GDOI2017酱油记+题解+关于oi的一些总结
- Java多态的实现机制
- html基本格式
- ios之反向传值
- 【京东商城首页实战3】导航条制作(2)
- stroke 文件 以及文件io返回值
- 蓝桥杯 基础练习 十进制转十六进制 JAVA
- 考研英语
- (转)HTTPS工作原理和TCP握手机制
- C++primer学习笔记-----5.1~5.2
- 基于matlab的蚁群算法理解
- 将数据集做成VOC2007格式用于Faster-RCNN训练