iOS UI-界面传值(三种方法)
#import <Foundation/Foundation.h> @interface DataModel : NSObject @property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *address; @end #import "DataModel.h" @implementation DataModel @end
#import <UIKit/UIKit.h>
@class DataModel;
//设置协议
@protocol PassValueDelegate <NSObject>
- (void) passValueFromFirstVCToSecondVC:(DataModel *) dataModel;
@end @interface FirstViewController : UIViewController
//设置代理
@property (nonatomic, strong) id<PassValueDelegate> delegate;
//设置通知传值接受者
@property (nonatomic, strong) DataModel *firstNOtificationModel;
//设置代理传值传值者
@property (nonatomic, strong) DataModel *firstDelegateModel; @end #import "FirstViewController.h"
#import "DataModel.h"
#import "SecondViewController.h" @interface FirstViewController ()
//设置接收通知传值的标签
@property (nonatomic, strong)UILabel *label;
//设置接收block传值的标签
@property (nonatomic, strong)UILabel *lblBlock; @end @implementation FirstViewController - (void)viewDidLoad {
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor orangeColor]]; [self createButtonAndLabel]; //创建观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveValue:) name:@"passValueFromSecondVCToFirstVC" object:nil];
} #pragma mark - 创建按钮和标签
- (void)createButtonAndLabel
{
//创建标签
self.label = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
[self.label setBackgroundColor:[UIColor redColor]];
self.label.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:self.label]; //创建标签
self.lblBlock = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
[self.lblBlock setBackgroundColor:[UIColor redColor]];
self.lblBlock.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:self.lblBlock]; //创建按钮
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake(, , , )];
[btn setBackgroundColor:[UIColor blackColor]];
[btn setTitle:@"goToNextView" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(goToNextView) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
} #pragma mark - 观察者接收值关联方法
- (void)receiveValue:(NSNotification *)notification
{
if ([notification.object isKindOfClass:[DataModel class]]) {
self.firstNOtificationModel = notification.object;
self.label.text = [NSString stringWithFormat:@"name:%@ address:%@",self.firstNOtificationModel.name,self.firstNOtificationModel.address];
}
}
#pragma mark - 代理传值、block接收值
//按钮关联方法
- (void)goToNextView
{
SecondViewController *secondVC = [[SecondViewController alloc] init];
[self presentViewController:secondVC animated:YES completion:nil]; [secondVC setBlock:^(DataModel *dataModel){
self.lblBlock.text = [NSString stringWithFormat:@"name:%@ address:%@",dataModel.name,dataModel.address];
}]; self.delegate = secondVC;
if ([self.delegate respondsToSelector:@selector(passValueFromFirstVCToSecondVC:)]) {
[self.delegate performSelector:@selector(passValueFromFirstVCToSecondVC:) withObject:self.firstDelegateModel];
}
} #pragma mark - 懒加载
- (DataModel *)firstDelegateModel
{
if (!_firstDelegateModel) {
_firstDelegateModel = [[DataModel alloc] init];
_firstDelegateModel.name = @"GuYu";
_firstDelegateModel.address = @"AnHui";
}
return _firstDelegateModel;
} @end
#import <UIKit/UIKit.h>
#import "FirstViewController.h"
@class DataModel;
//定义block类型
typedef void(^Block)(DataModel *dataModel); @interface SecondViewController : UIViewController <PassValueDelegate>
//通知传值的传值者
@property (nonatomic, strong) DataModel *secondNotificationModel;
//代理传值的接受者
@property (nonatomic, strong) DataModel *secondDelegateModel;
//block的接受者
@property (nonatomic, strong) Block block; @end #import "SecondViewController.h"
#import "DataModel.h" @interface SecondViewController () @property (strong, nonatomic) UILabel *label; @end @implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor groupTableViewBackgroundColor]]; [self createButtonAndLabel];
}
#pragma mark - 创建标签和按钮
- (void)createButtonAndLabel
{
//创建标签
self.label = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
[self.label setBackgroundColor:[UIColor redColor]];
self.label.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:self.label]; //创建按钮
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake(, , , )];
[btn setBackgroundColor:[UIColor blackColor]];
[btn setTitle:@"goToBack" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(goToBack) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn]; }
#pragma mark - block传值、通知传值
//按钮关联方法
- (void)goToBack
{
[self dismissViewControllerAnimated:YES completion:nil]; //block传值
self.block(self.secondNotificationModel); //通知传值
[[NSNotificationCenter defaultCenter] postNotificationName:@"passValueFromSecondVCToFirstVC" object:self.secondNotificationModel];
} #pragma mark - 代理协议方法
- (void)passValueFromFirstVCToSecondVC:(DataModel *)dataModel
{
self.secondDelegateModel = dataModel;
self.label.text = [NSString stringWithFormat:@"name:%@ address:%@",self.secondDelegateModel.name,self.secondDelegateModel.address];
} #pragma mark - 懒加载
//初始化_secondNotificationModel
- (DataModel *)secondNotificationModel
{
if (!_secondNotificationModel) {
_secondNotificationModel = [[DataModel alloc] init];
_secondNotificationModel.name = @"Bowen";
_secondNotificationModel.address = @"China";
}
return _secondNotificationModel;
}
//初始化self.block
- (void)setBlock:(Block)block
{
_block = block;
} @end
iOS UI-界面传值(三种方法)的更多相关文章
- iOS拨打电话(三种方法)
iOS拨打电话(三种方法) 查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯 ...
- Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!
大网站都有推出自己的手机访问版本页面,不管是新闻类还是视频网站,我们在电脑是无法直接访问到手机网站的,比如我经常访问一个3g.qq.com这个手机站点,如果在电脑上直接打开它,则会跳转到其它页面,一般 ...
- 用Fiddler可以设置浏览器的UA 和 手动 --Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!
附加以一种软件的方法是:用Fiddler可以设置浏览器的UA 以下3种方法是手动的 通过伪装User-Agent,将浏览器模拟成Android设备. 第一种方法:新建Chrome快捷方式 右击桌面上的 ...
- iOS 处理缓存的三种方法
缓存处理是个相当头疼的事情,要根据需要综合应用不同的策略.总的来说有以下几种情况: 1.URL缓存,例如社交应用的帖子浏览,要在viewDidAppear:里面进行URL缓存.简单来说就是用NSURL ...
- iOS之加密的三种方法
//需要导入 #import <CommonCrypto/CommonCryptor.h> ==============MD5加密============ NSString *str ...
- 更新UI界面的四种方法
一.runOnUiThread(new Runnable()): 二.Handler的sendMessage()系列: 三.Handler的post(): 四.View的post():
- Python 开发GUI之UI界面的三种引入形式
[纯手工代码] # -*- coding: utf-8 -*- # Author:Jack LEE # FileName:main # CreatedDate: 2020/9/17 # 手写代码的基础 ...
- iOS 拨打电话三种方法
小弟查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出 ...
- MVC控制器向View视图传值的三种方法
首先创建一个MVC的项目,其中需要一个控制器(TestController),三个视图(index,edit,detail) 1.项目结构如下:
- React Router v4 页面传值的三种方法
传值方法 1.props.params 使用React router定义路由时,我们可以给指定一个path,然后指定通配符可以携带参数到指定的path: <Route path='/user/: ...
随机推荐
- 20145322 Exp5 Adobe阅读器漏洞攻击
20145322 Exp5 Adobe阅读器漏洞攻击 实验过程 IP:kali:192.168.1.102 windowsxp :192.168.1.119 msfconsole进入控制台 使用命令为 ...
- canvas压缩图片
1.canvas.toDataUrl压缩图片 canvas的toDataUrl方法可以将内容导出为base64编码格式的图片,采用base64编码将比源文件大1/3,但是该方法可以指定导出图片质量,所 ...
- AMS1117稳压模块
AMS1117有降压稳压的作用.我们使用的是AMS1117-5,输出5V电压. 理论参数: 输出条件 最小值 理论值 最大值 理论电路图: 引脚图:
- C简介与环境配置
C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的.C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现. 在 1978 年,布莱 ...
- Vue项目中使用Vuex + axios发送请求
本文是受多篇类似博文的影响写成的,内容也大致相同.无意抄袭,只是为了总结出一份自己的经验. 一直以来,在使用Vue进行开发时,每当涉及到前后端交互都是在每个函数中单独的写代码,这样一来加大了工作量,二 ...
- Future Works on P4
Future Works on P4 P4 and NV: MPvisor, Hyper4, HyperV, Flex4 P4 and NFV P4 and Network Cache P4 and ...
- Linux command line exercises for NGS data processing
by Umer Zeeshan Ijaz The purpose of this tutorial is to introduce students to the frequently used to ...
- 关于ExtJS Row editing 行编辑 后 获取 编辑后记录值 的方法
listUsersGrid.on('edit', function(editor, e) { var pass = editor.record.data.password; editor.record ...
- C#在服务端验证客户端证书(Certificate)
使用https协议进行通讯的时候可以设置双向证书认证,客户端验证服务端证书的方法前面已经介绍过了,现在说一下在服务端验证客户端证书的方案. 这里给出的方案比较简单,只需要在Service端的配置文件中 ...
- python 元组元素计数
#create a tuple tuplex = , , , , , , , , print(tuplex) #return the number of times it appears in the ...