IOS那些事------callBack回传的方法

题前话

这些天卤煮一直在默默的碼着代码,但是还是感觉距离成功之日还是遥遥无期。没办法啦,今天下午正好后台有一些技术问题需要修改,我这边没有大事情,想了想咱不能在这一下午啥事也不干啊,偷个鸡,摸个狗这种事在我工作地方硬件条件也不允许。最后想了想就给大家喷一碰回传的那些事吧。

回传大家应该经常会使用的吧,啥,你说你没用过,来人呐,把他拉出去砍了......。在刚刚接触ios的时候我也不知道怎么回传,请教得一个通知回传的方法,于是,满篇的通知乱飞。通知不是不好,但是太灵活,不好控制。然后知道了代理回传,块回传的方法,最后自己去选择回传的方案。本篇文档献给那些刚刚跨入ios这一苦逼行业的同学,希望能给你带来一定的帮助(大神就不用看啦,😄😄)。

通知回传

来来来,一起喝通知这杯酒。

首先我定义两个控制器,用于回传测试。ViewController,SecViewController。

在SecViewController定义一个输入框控件,我们把输入的东西回传到第一个控制器:

#import "SecViewController.h"@interface SecViewController ()//输入textfield

@property (weak, nonatomic) IBOutlet UITextField *backField;

@end

然后把输入框输入完成的代理牵出来:

- (void)textFieldDidEndEditing:(UITextField *)textField

{

[self callBackOne];

}

现在是不是有人在想这个[self callBackOne]是什么鬼,这是调用通知的方法。因为我一会还要写代理,块的回传,你难道想让我再创建两个控制器或者把前面的方法删除在进行相应的测试吗?

发出通知

/**

*  第一种方法:通知回传

*/

-(void)callBackOne

{

NSDictionary *dic = @{@"field":self.backField.text};

[[NSNotificationCenter defaultCenter]postNotificationName:@"callBack"

object:nil

userInfo:dic];

}

在通知这我就不太罗嗦了,不太理解的请看另一篇:通知的那些事。

ViewController控制器创建一个按钮和一个显示回传数据的lable

#import "ViewController.h"#import "SecViewController.h"@interface ViewController ()//点击按钮

- (IBAction)gotoNext;

//显示label

@property (weak, nonatomic) IBOutlet UILabel *dataLabel;

@end

然后接受通知,实现通知方法

- (void)viewDidLoad {

[super viewDidLoad];

self.title = @"你瞅啥";

//接收通知

[[NSNotificationCenter defaultCenter]addObserver:self

selector:@selector(notCallBack:)

name:@"callBack"

object:nil];

}

/**

*  通知方法

*

*  @param user <#user description#>

*/

-(void)notCallBack:(NSNotification *)user

{

NSString *field = user.userInfo[@"field"];

self.dataLabel.text = field;

}

千万不要忘了不用的时候释放通知:

/**

*  通知一定要释放

*/

-(void)dealloc

{

[[NSNotificationCenter defaultCenter]removeObserver:self];

}


好了,到此通知回传结束,很简单的有木有,效果图:


代理回传

来来来,喝完一杯,还有一杯。

通知的最大的缺点也是最大的优点就是太灵活,不好控制。但是相反代理就很稳定,也是团队开发中用得最多的。

首先,创建一个代理:

@protocol SecViewControllerDelegate<NSObject>

//回传

-(void)callBack:(NSString *)field;

@end

@interface SecViewController : UIViewController//代理@property(nonatomic,weak)iddelegate;

@end

和通知一样,在输入框的意境完成输入的方法中调用代理

- (void)textFieldDidEndEditing:(UITextField *)textField

{

[self callBackTwo];

}

/**

*  第二种方法:代理

*/

-(void)callBackTwo

{

if ([self.delegate respondsToSelector:@selector(callBack:)]) {

[self.delegate callBack:self.backField.text];

}

}

然后咱们回到第一个控制器,首先挂上的代理

UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

SecViewController *secVC =[story instantiateViewControllerWithIdentifier:@"Sec"];

//代理方法的实现

secVC.delegate = self;

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

实现代理的方法:

/**

*  代理方法

*

*  @param field <#field description#>

*/

-(void)callBack:(NSString *)field

{

self.dataLabel.text = field;

}

运行效果图:


代理结束,我没有说太多,因为感觉你们看这一块,比我在这说要好得多,我会把demo链接给出,你们可以自己运行看看,会更好(如果有github账号的,可以来个星星的呀,😄😄)。

Block回传

来来来,还有最后一杯。

首先在第二个控制器定义一个块:

//块

@property(nonatomic,copy)void(^callBackBlock)(NSString *field);

然后喝前面两个一样,在输入框完成输入时调用:

- (void)textFieldDidEndEditing:(UITextField *)textField

{

[self callBackThree];

}

/**

*  第三种方法:块(Block)

*/

-(void)callBackThree

{

self.callBackBlock(self.backField.text);

}

然后咱们回到第一个控制器,实现块的方法:

UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

SecViewController *secVC =[story instantiateViewControllerWithIdentifier:@"Sec"];

//代理方法的实现

//secVC.delegate = self;

//块方法

__weak typeof(self)weakSelf = self;

secVC.callBackBlock = ^(NSString *field)

{

weakSelf.dataLabel.text = field;

};

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

运行效果图:


嘎嘎嘎,终于结束了。废话不多说,因为后台让我工作了。呜呜呜......。

github地址:https://github.com/sunyunfei/CallbackDemo.git

结语

我也看到了有的同学让写一篇block的知识点,我也正在努力,可是我也不可能直接百度了一点东西直接给大家。我写的必须是我自己理解的才行,不然怎么可能给大家说透彻。所以,block会有,请大家理解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容