#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-界面传值(三种方法)的更多相关文章

  1. iOS拨打电话(三种方法)

    iOS拨打电话(三种方法)  查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯 ...

  2. Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!

    大网站都有推出自己的手机访问版本页面,不管是新闻类还是视频网站,我们在电脑是无法直接访问到手机网站的,比如我经常访问一个3g.qq.com这个手机站点,如果在电脑上直接打开它,则会跳转到其它页面,一般 ...

  3. 用Fiddler可以设置浏览器的UA 和 手动 --Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!

    附加以一种软件的方法是:用Fiddler可以设置浏览器的UA 以下3种方法是手动的 通过伪装User-Agent,将浏览器模拟成Android设备. 第一种方法:新建Chrome快捷方式 右击桌面上的 ...

  4. iOS 处理缓存的三种方法

    缓存处理是个相当头疼的事情,要根据需要综合应用不同的策略.总的来说有以下几种情况: 1.URL缓存,例如社交应用的帖子浏览,要在viewDidAppear:里面进行URL缓存.简单来说就是用NSURL ...

  5. iOS之加密的三种方法

    //需要导入   #import <CommonCrypto/CommonCryptor.h> ==============MD5加密============ NSString *str ...

  6. 更新UI界面的四种方法

    一.runOnUiThread(new Runnable()): 二.Handler的sendMessage()系列: 三.Handler的post(): 四.View的post():

  7. Python 开发GUI之UI界面的三种引入形式

    [纯手工代码] # -*- coding: utf-8 -*- # Author:Jack LEE # FileName:main # CreatedDate: 2020/9/17 # 手写代码的基础 ...

  8. iOS 拨打电话三种方法

    小弟查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出 ...

  9. MVC控制器向View视图传值的三种方法

    首先创建一个MVC的项目,其中需要一个控制器(TestController),三个视图(index,edit,detail) 1.项目结构如下:

  10. React Router v4 页面传值的三种方法

    传值方法 1.props.params 使用React router定义路由时,我们可以给指定一个path,然后指定通配符可以携带参数到指定的path: <Route path='/user/: ...

随机推荐

  1. mysql的数据类型和字符集

    MySQL的数据类型 MySQL数据库支持的数据类型主要有以下几种: 整型 浮点型 字符 BLOB型 枚举和集合类型 JSON类型(MySQL5.7新增加的支持) 整型 整数类型是数据库中最基本的数据 ...

  2. bzoj1658: [Usaco2006 Mar]Water Slides 滑水

    Description It's a hot summer day, and Farmer John is letting Betsy go to the water park where she i ...

  3. cygwin下使用apt-cyg安装新软件

    1.获取  (记得先安装好git) git clone https://github.com/transcode-open/apt-cyg.git 2.安装apt-cyg cd apt-cyg chm ...

  4. 骗访问量的机房人物列传by xMinh

    作者:$xMinh$ 人物列传·Refun(Aufun,虚凡,人赢) 机房最人赢的人赢,上过表白墙的男人 在宿舍公然开设情感讲座和人赢培训班,教学成果显著,他的徒弟要么gay了要么凉了 认识的人极其广 ...

  5. JVM堆内存调优

    堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...

  6. HDU 2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=2243 题意: 给出m个模式串,求长度不超过n的且至少包含一个模式串的字符串个数. 思路: 如果做过poj2778 ...

  7. HDU 3549 Flow Problem(最大流模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=3549 刚接触网络流,感觉有点难啊,只好先拿几道基础的模板题来练练手. 最大流的模板题. #include< ...

  8. 数据库与hadoop与分布式文件系统的区别和联系

    转载一篇关系数据库与Hadoop的关系的文章 1. 用向外扩展代替向上扩展 扩展商用关系型数据库的代价是非常昂贵的.它们的设计更容易向上扩展.要运行一个更大的数据库,就需要买一个更大的机器.事实上,往 ...

  9. React Native的SliderIOS滑块组件

    import React,{Component}from 'react'; import { AppRegistry, StyleSheet, Text, View, SliderIOS, } fro ...

  10. 解决MVC 时间序列化的方法

    1.全局处理 处理代码 publict static void SetSerializationJsonFormat(HttpConfiguration config) { // Web API co ...