一、代理传值的方法

  1.Hehe1ViewController.h中

#import <UIKit/UIKit.h>

@protocol Hehe1ViewControllerDelegate <NSObject>

- (void)backValueWith:(NSString*)str;

@end

@interface Hehe1ViewController : UIViewController

@property(nonatomic,weak) id delegate;

@end

  2.Hehe1ViewController.m中

#import "Hehe1ViewController.h"

@interface Hehe1ViewController ()

@property(nonatomic,strong) UITextField *heheTextField;

@end

@implementation Hehe1ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UITextField *heheTextField = [[UITextField alloc] initWithFrame:CGRectMake(20, 200, 300, 40)];

self.heheTextField = heheTextField;

heheTextField.backgroundColor = [UIColor lightGrayColor];

[self.view addSubview:heheTextField];

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeSystem];

button1.frame = CGRectMake(20, 250, 300, 50);

button1.backgroundColor = [UIColor orangeColor];

[button1 setTitle:@"Back to VC" forState:UIControlStateNormal];

[button1 setTintColor:[UIColor whiteColor]];

[button1 addTarget:self action:@selector(goToHehe1) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button1];

}

- (void)goToHehe1 {

NSLog(@"hehe1...");

[_delegate backValueWith:self.heheTextField.text];

[self.navigationController popViewControllerAnimated:YES];

}

@end

  二、block传值

  1.Hehe2ViewController.h中

#import <UIKit/UIKit.h>

typedef void(^BackValue)(NSString *str);

@interface Hehe2ViewController : UIViewController

@property(nonatomic,copy) BackValue backValue;

- (void)returnStr:(BackValue)block;

@end

  2.Hehe2ViewController.m中

#import "Hehe2ViewController.h"

@interface Hehe2ViewController ()

@property(nonatomic,strong) UITextField *heheTextField;

@end

@implementation Hehe2ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UITextField *heheTextField = [[UITextField alloc] initWithFrame:CGRectMake(20, 200, 300, 40)];

self.heheTextField = heheTextField;

heheTextField.backgroundColor = [UIColor lightGrayColor];

[self.view addSubview:heheTextField];

UIButton *button2 = [UIButton buttonWithType:UIButtonTypeSystem];

button2.frame = CGRectMake(20, 250, 300, 50);

button2.backgroundColor = [UIColor orangeColor];

[button2 setTitle:@"Back to VC" forState:UIControlStateNormal];

[button2 setTintColor:[UIColor whiteColor]];

[button2 addTarget:self action:@selector(goToHehe2) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button2];

}

- (void)returnStr:(BackValue)block {

self.backValue = block;

}

- (void)goToHehe2 {

NSLog(@"hehe2...");

self.backValue(self.heheTextField.text);

[self.navigationController popViewControllerAnimated:YES];

}

@end

  三、在ViewController.m中接收传回的值

#import "ViewController.h"

#import "Hehe1ViewController.h"  //delegate

#import "Hehe2ViewController.h"  //block

#define klSceenWidth self.view.bounds.size.width

@interface ViewController ()

@property(nonatomic,strong) UILabel *label1;

@property(nonatomic,strong) UILabel *label2;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, klSceenWidth-40, 30)];

self.label1 = label1;

[self.view addSubview:label1];

  //delegate

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeSystem];

button1.frame = CGRectMake(20, 150, klSceenWidth-40, 30);

button1.backgroundColor = [UIColor orangeColor];

[button1 setTitle:@"go to hehe1" forState:UIControlStateNormal];

[button1 setTintColor:[UIColor whiteColor]];

[button1 addTarget:self action:@selector(goToHehe1) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button1];

  //block

UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(20, 200, klSceenWidth-40, 30)];

self.label2 = label2;

[self.view addSubview:label2];

UIButton *button2 = [UIButton buttonWithType:UIButtonTypeSystem];

button2.frame = CGRectMake(20, 250, klSceenWidth-40, 30);

button2.backgroundColor = [UIColor orangeColor];

[button2 setTitle:@"go to hehe1" forState:UIControlStateNormal];

[button2 setTintColor:[UIColor whiteColor]];

[button2 addTarget:self action:@selector(goToHehe2) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button2];

}

- (void)backValueWith:(NSString*)str {

self.label1.text = str;

}

- (void)goToHehe1 {

Hehe1ViewController *heheVC1= [[Hehe1ViewController alloc] init];

heheVC1.delegate = self;

[self.navigationController pushViewController:heheVC1 animated:YES];

}

- (void)goToHehe2 {

Hehe2ViewController *heheVC2= [[Hehe2ViewController alloc] init];

[heheVC2 returnStr:^(NSString *str) {

self.label2.text = str;

}];

[self.navigationController pushViewController:heheVC2 animated:YES];

}

@end

iOS开发——代理与block传值的更多相关文章

  1. iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)

    iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)   使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...

  2. iOS开发-Objective-C Block的实现方式

    前言:我们可以把Block当作一个闭包函数,它可以访问外部变量和局部变量,但默认是不可以修改外部变量.你可以使用它来做回调方法,比起使用代理(Delegate)会更加直观.顺带一提,苹果很多的接口(A ...

  3. iOS开发-代理模式

    代理模式有的时候也被称之为委托模式,但是实际上两者是有分别的,代理模式为另一个对象提供一个替身或占位符访问这个对象,代理对象和控制访问对象属于同一类,委托对象和对象不一定属于同一类.两者都可以控制类的 ...

  4. swift-delegate(代理)或者block传值

    1:delegate或者block传值 import UIKit class ViewController: UIViewController,TestDelegatePassValueDelegat ...

  5. iOS开发之使用block块进行数据遍历的方法

    看了一篇文章,发现遍历数组.字典中的数据时,除了使用for循环外,还可以使用block块进行操作,瞬间感觉iOS的语言代码确实有点高大上的感觉,下面就简单的介绍一下这个方法. 首先是最基本的运用形式, ...

  6. iOS开发 总结几种传值--extern,NSUserDefaults,Delegate

    1 设置委托(代理模式)      建一个委托testViewDelegate.h   #import//b中的参数传到a//设置委托方法,例如本文件//在b中.h描述NSObject * deleg ...

  7. iOS开发——语法&高级Block练习

    高级Block练习 一 .最简单的block使用 使用block的三个步骤:1.定义block变量 2.创建block代码块 3.调用block匿名函数 定义一个block的构成包括:返回值,bloc ...

  8. iOS开发-多层嵌套block中如何使用__weak和__strong

    1.关于__weak__weak只能在ARC模式下使用,也只能修饰对象(比如NSString等),不能修饰基本数据类型(比如int等)__weak修饰的对象在block中不可以被重新赋值.__weak ...

  9. iOS开发-委托(Delegate)浅谈

    委托其实并不是OC中才有,C#中也有,不过彼此的理解方式是不一样的,OC中委托是协议的一种,需要使用@protocol声明,委托一般在iOS开发中页面中传值用的比较多.委托是Cocoa中最简单.最灵活 ...

随机推荐

  1. php Memcached

    PHP 连接 Memcached 服务 在前面章节中我们已经介绍了如何安装 Memcached 服务,接下来我们为大家介绍 PHP 如何使用 Memcached 服务. PHP Memcache 扩展 ...

  2. Android 使用存放在存assets文件夹下的SQLite数据库

    因为这次的项目需要自带数据,所以就就把数据都放到一个SQLite的数据库文件中了,之后把该文件放到了assets文件夹下面.一开始打算每次都从assets文件夹下面把该文件夹拷贝到手机的SD卡或者手机 ...

  3. 拖拽加点ui吧

    有一段时间没写东西了,真的是静下心来不容易的事情. 把之前的代码再翻看下,想想要加点ui什么的. 2d  塔防ui之前 我看过,但放到3d上做,其实难度是很大的. 不过,这不算什么,关键是 合理的 布 ...

  4. Linux关闭防火墙,关闭Selinux

    查看防火墙状态 iptables -L or service iptables status 临时性关闭防火墙 iptables -F or service iptables stop 永久性关闭防火 ...

  5. PowerDesigner中逆向工程将数据库中comment赋值到name

    '------------------------------------------------------------ ' '脚本功能: ' PowerDesigner中逆向工程完成后,将数据库中 ...

  6. 转 Android HTTPS详解

    目录(?)[-] 前言 HTTPS原理 SSLTLS协议作用 基本的运行过程 握手阶段的详细过程 客户端发出请求ClientHello 服务器回应ServerHello 客户端回应 服务器的最后回应 ...

  7. SoftReference 介绍

    1 Java中的SoftReference 2 即对象的软引用.如果一个对象具有软引用,内存空间足够,垃 圾回收器就不会回收它:如果内存空间不足了,就会回收这些对象的内存.只要垃圾回收器没有回收它,该 ...

  8. ural1855 Trade Guilds of Erathia

    Trade Guilds of Erathia Time limit: 2.0 secondMemory limit: 64 MB The continent of Antagarich was co ...

  9. css设置层级显示

    效果: 代码: <li id="tabIdcontent4" class="nomal" tabid="content4" style ...

  10. js中原生对象、内置对象和宿主对象(转)

    本帖最后由 无解. 于 2012-9-9 12:13 编辑 <ignore_js_op> 这个图来自于<JavaScript语言精髓与编程实践>第三章P184页.最近在改第二版 ...