你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS編程技術 >> ios - block數據的回調

ios - block數據的回調

編輯:IOS編程技術
  • block在代理,kvo中傳遞數據效率最高

實現原理

控制器B想傳遞數據給控制器A.通過在B控制器中創建Block類型的類,創建方法,方法參數是剛才創建的block類型的變量.在方法實現的內部調用參數的block(@"你好");此時調用到了block則,block就會到寫了blcok實現的地方去執行代碼,也就是A控制器中,在A控制器中調用B控制器剛才創建的方法,由於方法的參數有block,則定義block內部要實現的代碼,定以後,當A掉用B內部的方法,然後方法跳入B控制器去執行,當方法內部的block比調用的時候,由於實現在A控制器,則又會跳回來A控制器執行A中定義的block要實現的代碼.具體看下面例子

//
//  SecondViewController.h
//  test
//
//  Created by 裴波波 on 16/4/8.
//  Copyright ? 2016年 裴波波. All rights reserved.
//

#import <UIKit/UIKit.h>

//先定義一個有參數,參數類型為NSString * 類型,無返回值的block類型
typedef void(^Myblock)(NSString *);
@interface SecondViewController : UIViewController

@property(nonatomic,copy) Myblock frstBlock;

//定義方法參數是block
-(void)testANewBlock:(Myblock) block;

@end
  • .m文件實現

//
//  SecondViewController.m
//  test
//
//  Created by 裴波波 on 16/4/8.
//  Copyright ? 2016年 裴波波. All rights reserved.
//

#import "SecondViewController.h"

@interface SecondViewController ()

@property (weak, nonatomic) IBOutlet UILabel *lblName;
@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

-(void)testANewBlock:(Myblock)block{

    //調用block,此時block的實現代碼在哪裡寫的就會在哪裡執行.此時blcok實現在ViewControlle中寫的,執行時跳入A控制器,把參數@"裴波波" 傳入到Viewcontroller控制器
    block(@"裴波波");
}


@end

  • viewcontroller控制器代碼

//
//  ViewController.m
//  test
//
//  Created by 裴波波 on 16/4/8.
//  Copyright ? 2016年 裴波波. All rights reserved.
//

#import "ViewController.h"
#import "SecondViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *btn;

@end

@implementation ViewController


-(void)viewDidLoad{

    [super viewDidLoad];
}

//點擊按鈕跳轉控制器
- (IBAction)clickButton:(id)sender {
    
    SecondViewController * seVc = [SecondViewController new];
    
    //調用secondVC方法,字定義secondVc中調用block的時候要執行的代碼,在secoVc中調用block-----block在哪裡就在那個控制器裡面執行block,
    [seVc testANewBlock:^(NSString * name) {
        NSLog(@"peibobo---%@",name);
        [_btn setTitle:name forState:UIControlStateNormal];
    }];
}


@end


小結: 誰要穿值誰就定義含有block的參數的方法,在方法內部調用blcok,將要傳遞的參數給了blcok,blcok跳進實現它要執行代碼的'地方'執行代碼.傳值完成

  • demo下載地址:http://pan.baidu.com/s/1boIoU2F
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved