iOS 设计模式-Block实现代理的逻辑

在A页面,点击跳转到B页面,B页面操作完,回到A页面,并刷新A页面的内容。典型的例子,就是在一个列表里,点击新增,跳到新增页面,新增完,把数据传回给列表页,并刷新列表页里的内容。

这个,我平时一般是通过代理来实现,下面试着通过Block来实现。

在B页面定义Block,供A页面调用。

/**
 *  确认订单选择返回block
 */
@property (nonatomic, strong) void (^ selectedAddressBlock)(HGAddressModel * address);

B页面,操作完成,给Block传回调值

/**
 *  选中行,为了确认订单时,选择收货地址使用
 */
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    HGAddressModel *entity = self.dataSource[indexPath.row];
    if (self.selectedAddressBlock) {
        self.selectedAddressBlock(entity);
    }
    [self.navigationController popViewControllerAnimated:YES];
}

A页面操作就很简单了,跳转到B页面,直接调用B页面的Block 就可以拿到结果了。

- (void)jumpAddress:(UIButton *)sender {
    AddressListViewController *address = [[AddressListViewController alloc] init];
    address.hidesBottomBarWhenPushed = YES;
    address.title = @"地址管理";
    address.selectedAddressBlock = ^(HGAddressModel *model){
        DR_NSLog(@"----------model------------%@",model.province_name);
    };
    [self.navigationController pushViewController:address animated:YES];
}

OK,完成。

时间: 2024-10-24 05:25:35

iOS 设计模式-Block实现代理的逻辑的相关文章

iOS设计模式-Block实现代理的逻辑

在A页面,点击跳转到B页面,B页面操作完,回到A页面,并刷新A页面的内容.典型的例子,就是在一个列表里,点击新增,跳到新增页面,新增完,把数据传回给列表页,并刷新列表页里的内容. 这个,我平时一般是通过代理来实现,下面试着通过Block来实现. 在B页面定义Block,供A页面调用. 1 /** 2 * 确认订单选择返回block 3 */ 4 @property (nonatomic, strong) void (^ selectedAddressBlock)(HGAddressModel *

IOS中block和代理

从ios4开始引入block,就是代码块,结构类c语言 基本结构 返回值 (^block名称)(参数):int(^BlockName)(int):返回值为int型,参数是一个int值的叫BlockName的block 我们使用一个block时: // 代码例子 int (^BlockExample)(int); BlockExample = ^(int n){return n*2;}; int result = BlockExample(1); 个人使用场景: 一:动画 我第一次接触到block

iOS开发——OC篇&消息传递机制(KVO/NOtification/Block/代理/Target-Action)

iOS开发中消息传递机制(KVO/NOtification/Block/代理/Target-Action) 今晚看到了一篇好的文章,所以就搬过来了,方便自己以后学习 虽然这一期的主题是关于Foundation Framework的,不过本文中还介绍了一些超出Foundation Framework(KVO和Notification)范围的一些消息传递机制,另外还介绍了delegation,block和target- action. 大多数情况下,消息传递该使用什么机制,是很明确的了,当然了,在某

iOS开发——项目实用技术OC篇&将Block作为代理来使用,实现传值

将Block作为代理来使用,实现传值 在这里http://www.cnblogs.com/iCocos/p/4659878.html,笔者已经将代理,Block,通知传值的方式总结了一下,今天使用的不一样,我们这里使用的是在一个方法中将一个block代码保存起来,再回到blcok内部去执行. 这里使用的是在地图中,,,,好了不多说,开干 1:首先,定义一个blcok typedef void(^ResultBlock)(CLLocation *currentLoc, CLPlacemark *p

iOS 设计模式

Ios 设计模式,你可能听说过,但是你真正知道这是什么意思么?大部分的开发者大概都同意设计模式很重要,但是关于这一部分却没有很多的文章去介绍它,我们开发者很多时候写代码的时候也并不重视设计模式. 设计模式是在软件设计上去解决普通问题的可重用的方法.他们是是帮助你让所写的代码更加容易理解和提高可重用性的模板.它们还可以帮你创建松散耦合的代码是你能不费很大功夫就可以改变或者替代你的代码中的一部分. 如果你对设计模式感到生疏,那么我有个好消息告诉你!首先,你已经用了很多ios设计模式多亏了Cocoa

iOS之block浅谈

前言 ios4.0系统已开始支持block,在编程过程中,block被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:block是inline的,并且它对局部变量是只读的. block和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. block的使用 1.block的定义 // 声明和实现写在一起,就像变量的声明实现 int a

IOS设计模式之一(MVC模式,单例模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么翻译错误,请与我联系谢谢. iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不会太关注它. 在软件设计领域,设计模式是对通用问题

iOS设计模式

iOS设计模式,很多开发这都是听得多,但是有时候自己即使用过也不会很在意,开发者在写代码的时候也不会注意它. 在软件设计领域,设计模式是对通过问题的可复用的解决方案.设计模式是一系列帮你写出可理解和复用的模板,设计模式帮你创建松耦合的代码,你不需要花费太多就可以改变或者替换代码中的组件. (1)代理模式 应用场景:当一个类的某些功能需要由其他别的类别来实现的,但是又不确定是哪个类 优势:松耦合 实例:tableView的数据源delegate,通过和protocol的配合,完成委托. 列表row

IOS设计模式之四(备忘录模式,命令模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 备忘录(Memento)模式 备忘录模式快照对象的内部状态并将其保存到外部.换句话说,它将状态保存到某处,过会你可以不破坏封装的情况下恢复对象的状态,也就是说原来对象中的私有数据仍然是私有的. 如何使用备忘录模式 在ViewController.m中增加