博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios Block解决循环引用和回传值
阅读量:6217 次
发布时间:2019-06-21

本文共 1529 字,大约阅读时间需要 5 分钟。

存在这么一个需求:为了降低控制器的耦合度,自定义了视图控件,但是现在另外一个页面需要显示自定义视图上的值;需要用block回调到控制器中来显示

啰嗦了一大堆,说个简单明了的(需求:B控制器要向A控制器传值)。

1.首先第一步要在B控制器中定义block 例如:

#import "BViewController.h"

typedef void (^ AnswerBlock)(NSString *resutlStr);

@class GXRiskRelatedQuery;

@interface GXRiskViewController : BViewController 

@property (nonatomic, copy) AnswerBlock answerBlock;

@end

2.来到B控制器的.m文件中,(回调的是网络数据,所以呢,应该在B控制器的网络请求成功的地方实现这个block)

#pragma mark 提交风险测评答案接口

- (void)requestDataWithRisksubmit:(NSString *)answerString

{

    NSDictionary *params = @{

@"fundid" : [[GXSharedClass sharedClass] GXAccount],

                             @"answers": answerString};

    MJLog(@"params == %@",params);

    [GXRisksubmit requestWithParams:params result:^(NSInteger respCode, NSString *respMsg, id responseObject) {

        if (respCode == 1) {

            

            GXRisksubmit *riskSubmit = (GXRisksubmit *)responseObject[0];

            self.messageStr = riskSubmit.message;

            [self setupAlertView];

     // 这个是判断模型是否有数据的

            if (riskSubmit.isHaveData) {

               if (self.answerBlock) {

                    self.answerBlock(riskSubmit.risktype);// 这个是回调的值,也就是从模型中取得的值,也就是在A控制器中要显示的值

                }

                

            }

            

        }

    }];

    

}

3.然后来到A控制器中实现以下方法

首先需知道A控制器在那个地方push到B控制器中的(我写的项目我知道是在哪里push的)

B控制器 *BVC = [[B控制器 alloc] init];

            __weak A控制器 *__self = self;  // 此代码是解决循环引用的

            riskViewVC.answerBlock = ^(NSString *answer){

                [__self receiveAnwser:answer];

            };

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

 

4.最后还得实现一个方法(此方法是用来赋值的)

-(void)receiveAnwser:(NSString *)resultStr

{

    _guardLabel.text = resultStr;

    [GXSharedClass sharedClass].riskValue = resultStr;

}

 

转载于:https://www.cnblogs.com/fantasy3588/p/4627396.html

你可能感兴趣的文章
Intel 11代全新核显出现了!好强 好乱
查看>>
Windows Server 2012四个版本的异同
查看>>
新的开始
查看>>
如何实现报表设计中的高精度报表套打?
查看>>
敏捷软件开发实践-Sprint Story Point Estimation
查看>>
相关论文汇总
查看>>
fiddler测试弹窗报错:creation of the root certificate was not successful
查看>>
Sass--嵌套、变量、运算
查看>>
Quill.js 富文本编辑器插件使用
查看>>
css改变滚动条的样式:
查看>>
匿名函数_ 生成器
查看>>
开发一个自己的 CSS 框架(一)
查看>>
Java如何把链接中的参数在页面使用参数名字获取ModelMap model去页面显示或者处理...
查看>>
从数据库(oracle)里把数据导出(excel)
查看>>
多进程,守护进程,锁
查看>>
Android-布局管理-表格布局
查看>>
exe4j生成exe后执行报错
查看>>
Python复习
查看>>
Spring Cloud(服务的消费者 ribbon+restTemplate)
查看>>
[python] colorama 模块 - 改变控制台输出文本的颜色
查看>>