关于block的传值

#import <UIKit/UIKit.h>

@interface BViewController : UIViewController

@property(nonatomic,strong)void (^ returnStr) (NSString *str);
- (void)returnStr:(void (^) (NSString *str))str;

@end

1.首先要更正自己的一个观点,属性为block函数是能够被strong修饰的(自己不知道怎么搞的,一直以为其职能被assign修饰)

2.那就是关于block的传值了,直接代码

在A控制器中

- (IBAction)tiaoZhuan:(id)sender {

    //A控制器中调用B控制器中带有block函数的方法

    [self.BVC returnStr:^(NSString *str) {

        self.label.text = str;

        [self.view setNeedsDisplay];

    }];

    [self presentViewController:self.BVC animated:YES completion:nil];

}

在B控制器中 .h文件

#import <UIKit/UIKit.h>

@interface BViewController : UIViewController
//这里的block属性需要用strong修饰
@property(nonatomic,strong)void (^ returnStr) (NSString *str);
- (void)returnStr:(void (^) (NSString *str))str;

@end

.m文件

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"B-viewDidLoad");
    UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    [button setTitle:@"返回" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void)returnStr:(void (^) (NSString *str))str {
    self.returnStr = str;
    //str(@"我是反回来的");
}

//返回函数
- (void)back:(UIButton *)sender {
    self.returnStr(@"我是反回来的");
    [self dismissViewControllerAnimated:YES completion:nil];
}
时间: 2024-12-14 00:30:25

关于block的传值的相关文章

代理和block反向传值

代理传值: // SendViewController.h #import <UIKit/UIKit.h> @protocol SendInFor <NSObject> -(void)sendInForIdea:(NSString*)text; @end @protocol SendInForTwo <NSObject> -(void)sender:(NSString*)text; @end @interface SendViewController : UIViewC

block的传值和使用

block的传值 1.第一页中声明一个block,需要传入一个颜色,让当前的view变色 //声明一个block,需要传入一个颜色,让当前的view变色 void(^changeColor)(UIColor *color) = ^(UIColor *color){ self.view.backgroundColor = color; }; 2. 第一页中//block传值---------将block给第二个页面 SecondViewController *secondVC = [[Second

block的传值简单示例仅供参考,大牛勿喷

#import "ViewController.h" typedef void(^sumBlock)(int s);//声明为一个类型; /** *  用声明的block类型 sumBlock 定义block变量 s,s当做方法sum的一个参数, * *  这样在sum的方法实现里面给这个block变量s的参数传值,这个值就可以在调用 sum方法的地方通过这个block的参数值拿到在sum实现内传递的值 */ - (void)sum:(int)a :(int)b :(sumBlock)

ios开发的block反向传值

block 的反向传值,一直以来都是copy, 今天写出来用来加深印象, 也给一些懒哥们copy的方便些.不多说,直接上代码. #import <UIKit/UIKit.h> //第一步(第二个页面.h) typedef void (^secondVcBlock)(NSString*); @interface SecondViewController : UIViewController //第二步(第二个页面.h)声明一个属性 @property(nonatomic,copy)secondV

Block控制器传值和内存泄漏

(1)Block是C语言的,是一种数据类型.Block出现后,很多代理都会被替代.Block是一种数据类型,是提前准备好的代码段,在需要的时候执行.其实就像调用一个函数一样.准备代码就是{},执行就是(); (2)Block常见问题: *在定义Block时,如果引用了外部变量,会对外部变量做一次copy,记录住定义block时候变量的值,如果后续这个变量变了,也不会影响block的变化,这一瞬间是几就是几 *默认情况下不允许Block修改外部变量,因为拷贝是const拷贝.因为Block可以当一

block 页面传值小结

我以自己项目中的一个模块为例,首先有两个页面,第一个页面为显示城市页面,第二个页面为选择要使用block传的值(城市名). 第一个页面中的显示控件: //自定义左部定位视图 self.locView = [[LocationView alloc] initWithFrame:CGRectMake(0, 0, SCREENWIDTH/2-35, 25)]; self.locView.imgView.image = [UIImage imageNamed:@"around"]; UITap

iOS 代理与block 逆向传值 学习

一般在项目中出现逆向传值的时候就需要用到代理.block 或者通知中心了.由于公司的项目底层封装的很好,所以项目做了三四个月就算碰到需要逆传的情况也不用自己处理.但是最近遇到了一个特别的情况就需要自己处理一下了,之前也在网上看了一下关于如何选择代理.block 或者通知中心.个人感觉代理和通知中心都比较简单,block稍为有点复杂.代理大家都会用,所以当时就选用了通知中心来处理.之后有一次公司的网实在太差了,出现了逆传数据失败的情况,引起了我的注意,打上断点之后才发现,通知中心的那个方法完全没有

block 页面传值

Block 传值 .h typedef void(^CountBlock)(NSIntegerfigure); -(void)CountWithFigureBlock:(CountBlock)figureBlock; .m CountBlock cBlock; #pragma mark - 块传值调用的方法 -(void)CountWithFigureBlock:(CountBlock)figureBlock { cBlock=figureBlock; } 块的使用 InCashViewCont

IOS Block 反向传值

1.在需要像上一个界面传值的.h 文件实现代理方法 @property (nonatomic, copy) void(^isOpenHandler)(BOOL) ; 2.在执行操作的时候需要江操作的结果反向传值给上个界面的时候调用Block if (self.isOpenHandler) { self.isOpenHandler(YES); } 3.在第一个视图控制器中 Push 的时候调用Block   接受回传回来的值 WM.isOpenHandler = ^(BOOL isopen){ i