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/: ...
随机推荐
- Win10 Ubuntu 双系统 卸载 Ubuntu
Win10 Ubuntu 双系统 卸载 Ubuntu 其实卸载 Ubuntu 系统很简单,进 win10 系统之后,磁盘管理,格式化 Ubuntu 的磁盘就可以了. 但是最费劲的是什么呢? 就是格式化 ...
- Android 拖动条 和 Handle
- 20145331魏澍琛《网络对抗》Exp8 Web基础
20145331魏澍琛<网络对抗>Exp8 Web基础 实践内容: 1.简单的web前端页面(HTML.CSS等) 2.简单的web后台数据处理(PHP) 3.Mysql数据库 4.一个简 ...
- Zigbee学习
(一)Zigbee简介和开发环境快速建立(IAR) 1.我不是很清楚控制链条,对于Zigbee不是太清楚 答案:CC2530 芯片上集成了 8051 内核(增强型) 2.性能特点:低速率远距离,这造就 ...
- HTTP If-Modified-Since引发的浏览器缓存汇总
在看Spring中HttpServlet的Service方法时,对于GET请求,代码逻辑如下: if (method.equals(METHOD_GET)) { long lastModified = ...
- 骁龙820和KryoCPU:异构计算与定制计算的作用 【转】
本文转载自:https://www.douban.com/group/topic/89037625/ Qualcomm骁龙820处理器专为提供创新用户体验的顶级移动终端而设计.为实现消费者所期望的创新 ...
- ubuntu16.04下firefly rk3288的编译安卓4.4
一.背景 OS: ubuntu 16.04 二.配置交叉编译环境 2.1 安装openjdk sudo apt-get install openjdk-7-jdk 2.2 使在同一台机器上可以编译an ...
- 小朋友排队|2014年蓝桥杯B组题解析第十题-fishers
小朋友排队 n 个小朋友站成一排.现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友. 每个小朋友都有一个不高兴的程度.开始的时候,所有小朋友的不高兴程度都是0. 如果某个小朋 ...
- mybatis的注解开发之三种动态sql
脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...
- layer.alert自定义关闭回调事件
在项目应用中,遇到自定义关闭layer.alert弹出层,即在关闭layer.alert时,可以自动触发关闭时的事件, 具体方法为: layer.alert('爱心提示!', function(){ ...