#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. 利用Python网络爬虫爬取学校官网十条标题

    利用Python网络爬虫爬取学校官网十条标题 案例代码: # __author : "J" # date : 2018-03-06 # 导入需要用到的库文件 import urll ...

  2. ms11_050漏洞攻击

    ms11_050漏洞攻击 开启msfconsole 查看针对MS11_050漏洞的攻击模块 进入模块 查看该模块的具体信息 设置paylaods 查看具体参数设置 设置其相关参数 攻击 ie浏览器发生 ...

  3. 微信小程序——3、逻辑js文件

    逻辑层js文件 微信小程序前端进行了层次划分,分为逻辑层和视图层.逻辑层实现对数据的加工和处理.与HTML页面相似,逻辑层使用JavaScript编写.逻辑层将数据处理后发送至视图层,同时接受视图层的 ...

  4. 20165211 2017-2018-2 《Java程序设计》第6周学习总结

    20165211 2017-2018-2 <Java程序设计>第6周学习总结 教材学习内容总结 本周,我学习了书本上第八.十五两章的内容,以下是我整理的主要知识. 第八章 常用实用类 St ...

  5. STM32.BOOT

    BOOT0 和 BOOT1STM32 三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的?Flash.2)SRAM = 芯片内置的 RAM 区,就是内存啦.3)系统存储器 ...

  6. C语言: 两个int变量相除,结果保留两位小数

    #include<stdio.h> void main() { ,j=; float h; h=(*/)/; printf("%.2f",h); } 注:%f:不指定宽 ...

  7. C++11 正则表达式——实例系统(转载)

    一.用正则表达式判断邮箱格式是否正确 1 #include <regex> #include <iostream> #include <string> bool i ...

  8. 关于Session的概念和测试点

    Session概要 Session 是用于保持状态的基于 Web 服务器的方法,在 Web 服务器上保持用户的状态信息供在任何时间从任何页访问. Session 允许通过将对象存储在 Web 服务器的 ...

  9. linux下如何使用命令行配置网络

    答:一共分成以下几个步骤: 注:笔者使用的是ubuntu 1.设置ip sudo ifconfig eth0 192.168.1.121 2.设置网关 sudo route add default g ...

  10. JavaScript:Delete属性

    以前,我就晓得delete只能够删除隐性属性(就是没有进行声明的变量),但是不知道为什么这样? 隐性属性:在页面中以前没有声明过该变量,直接进行赋值的 str='hongda' 其实这是由属性的特性决 ...