iOS协议传值封装总结

作者: handsome丶亮 | 来源:发表于2016-03-19 17:43 被阅读368次

大家好,我是亮亮,这是我总结的协议传值封装的方法。

问题:如果A页面跳转B,B需要回传值至A页面,怎么回传?

当然,回传有很多方式,诸如协议,通知,Block,AppDelegate等等。但协议是最安全,也是最符合面向对象语言风格的一种值回传方式。

一般协议回传的做法是在B类的.h文件中声明协议和协议方法(1),然后声明协议属性(2),在B中的.m中调用协议方法(3)。

再回到A类中遵守协议(4),A页面跳转B页面时,将协议对象设置成自己self(5),最后引入协议方法(6)达到回传的目的。

是不是很麻烦?确实太麻烦了,6个步骤,如果每次回传值都这么写,累觉不爱啊!

其实我们可以这么做,下面看下如何封装协议传值吧!

1.建立SelectProtocal的.h文件(只需要创建Header File)

如下:

#import

@protocolSelectProtocal

@optional

- (void)didSelectedList:(NSMutableArray*)array type:(NSString*)type;//可传递一个数组

- (void)didSelectedSingle:(id)item type:(NSString*)type;//可传递一个对象

@end

2.在B类中:

.h中引入协议头文件

#import"SelectProtocal.h"

声明协议属性

@property(nonatomic,weak)__weak id delegate;

在.m合适的地方传递

if(self.delegate&&[self.delegaterespondsToSelector:@selector(didSelectedList:type:)]){

[self.delegate didSelectedList:array type:@"Btype"];

[self.navigationControllerpopViewControllerAnimated:YES];//跳转回A类

}

注:

self.delegaterespondsToSelector:@selector(didSelectedList:type:):协议中的方法,如果是要传递一个对象,则用另外一个方法

array:你要传递的数组

Btype:你要传值的类型,名字随便取,用于标注,在接收值的地方会用到,此参数非常重要,必须是唯一的

3.到A类中

遵守协议:

<SelectProtocal>

设置代理:

BViewController *ctrl = [BViewController new];//在A类跳转B类处

ctrl.delegate=self;

4.在A类中实现协议方法:

- (void)didSelectedList:(NSMutableArray*)array type:(NSString*)type{

if([typeisEqualToString:@"Btype"]) {

         注:这里用到了B类中的标识符Btype,这个标识符必须唯一,因为会在其他类中复用到这个协议方法,如果标识符冲突就会有问题。

        在这里我们就能取到从B类中传递过来的数组array,如果是对象同理调用另外一个协议方法传递。

}

这样如果你明白了,下次就可省去了声明协议方法的时间了。

相关文章

  • iOS协议传值封装总结

    大家好,我是亮亮,这是我总结的协议传值封装的方法。 问题:如果A页面跳转B,B需要回传值至A页面,怎么回传? 当然...

  • h5与安卓,ios交互

    调用ios方法并传值 1、首先判断是不是ios手机 2、将ios方法进行封装并在页面调用传值即可 ios调用h5的...

  • iOS 常用传值方式

    总结 iOS 日常开发中的几种常用传值方式:正向传值代理传值block传值通知传值单例 文章代码:https://...

  • UI总结-界面传值

    UI总结-界面传值(属性传值,协议传值,block传值,通知中指传值) 在编程过程中,界面传值是很重要的一部分,常...

  • IOS 协议传值

    1、在需要传值给其他类的类头文件中定义一个协议。 @protocol stringDelegate -(void)...

  • MY_iOS知识点总结

    iOS常用设计模式总结 iOS传值方式总结 有时候,在同一个类里,方法之间传值,我们可以采用runtime动态绑定...

  • [学习笔记]_iOS代理基本使用,界面间传值

    参考链接: 你真的了解iOS代理设计模式吗? iOS开发-Protocol协议及委托代理(Delegate)传值 ...

  • iOS中2种正向传值,6种反向传值方式归纳总结

    1、属性传值 前向后传值。2、协议传值3、Block传值 代替协议代理传值,主要时间点问题。4、单...

  • IOS 代理协议传值

    顺传 假设A为第一个视图控制器,B为第二个视图控制器 在A中导入B的.h文件 场景:A向B传值 第一步:在B的.h...

  • Objective-C界面传值(二):协议传值

    协议传值 协议传值是利用协议的特性来实现界面传值的一种方法.我们把要传值得页面当作协议声明者,把接收值得页面作为代...

网友评论

本文标题:iOS协议传值封装总结

本文链接:https://www.haomeiwen.com/subject/ijmhlttx.html