iOS回调函数(block篇)

来源:互联网 发布:韩剧网软件下载 编辑:程序博客网 时间:2024/06/11 12:05

我们经常用到回调,到底什么是回调函数呢?

回调函数就是由申明函数的类调用函数,而实现却在另一个类中。事实上,通知,block,代理虽然名字不一样但是原理都一样,都是利用回调的机制。

下面就一起了解下block的回调,以block在两个控制器之间的回调传值为例:

首先我们创建一个视图控制器myViewController

我们在控制器中自定义一个block ,代码如下:

#import <UIKit/UIKit.h>


typedef void (^ReturnTextBlock)(NSString *showText);


@interface myViewController : UIViewController


@property(strong,nonatomic)ReturnTextBlock textblock;//申明block


//- (void)returnText:(ReturnTextBlock)block;


@end


#import "myViewController.h"


@interface myViewController ()


@end


@implementation myViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view.

    self.view.backgroundColor=[UIColorwhiteColor];

    UIButton*btn=[UIButtonbuttonWithType:UIButtonTypeCustom];

    btn.frame=CGRectMake(100,100, 30, 30);

    btn.backgroundColor=[UIColorblueColor];

    [btn addTarget:selfaction:@selector(btnClicked)forControlEvents:UIControlEventTouchUpInside];

    [self.viewaddSubview:btn];

}


-(void)btnClicked

{

    self.textblock(@"传值到另外一个控制器");//调用block

    [selfdismissViewControllerAnimated:YEScompletion:nil];

}


下面看看block的实现在哪里,他在另外一个控制器中

- (IBAction)ValueSend:(id)sender {

    

    myViewController*my=[myViewControllernew];

    my.textblock=^(NSString *showText) {

        

    [self.textbtnsetTitle:showTextforState:UIControlStateNormal];//相当于block的实现,显示在btn上

    

    };

    

    [selfpresentViewController:my animated:YEScompletion:nil];

}


上面是一个简单的代码实例,实际上定义一个block变量就像定义一个函数,只有调用block时才会执行{}里面的内容。


1 0
原创粉丝点击