完成处理程序在IBAction方法中调用

时间:2016-12-13 12:27:11

标签: ios objective-c objective-c-blocks completionhandler

我正在调试一个有旧库的旧项目。我不确定他们是如何通过按钮操作方法调用块处理程序的。他们有一个他们声明了方法的类

+ (void) method: (NSString *) parameter;

我想,他们正在为按钮添加取消按钮和操作方法。他们宣布一个街区为

typedef void (^simpleBlock)(void);

@property (nonatomic, copy) simpleBlock simpleBlock;

当它在ViewController类中实现时,它被称为

[ClassName method:@"parameter"].simpleBlock = ^{
        //Do something
    };

他们如何将块与按钮操作和方法相关联,因为我看不到它是库,只有头文件。任何有关理解此实现的帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

对于我们这样编码的任何动作调用一个块,

TotalLikes_Comments.h

@property (nonatomic, copy) void (^LikeButtonTapAction)(TotalLikes_Comments *aCell);

- (IBAction)openLikesClick:(id)sender;

TotalLikes_Comments.m方法的实际实施是

- (IBAction)openLikesClick:(id)sender {
    if (self.openLikesTapAction) {
        self.openLikesTapAction(self);
    }
}

只要按钮单击此块,就会使用类的对象

进行初始化

每当我们想要操作时,不需要在类文件中编写动作代码,只需在初始化类的地方编写代码eg.in cellforrow atIndexpath

cell.LikeButtonTapAction = ^(TotalLikes_Comments *aCell){
  // Do your stuff.
};

以上是IBAction中调用Block的逻辑。 但在您的场景中,这是用框架编写的。其中Ibaction Logic对所有人都是隐藏的。例如

if(self.openLikesTapAction) {
     self.openLikesTapAction(self);
  }

希望你能从中得到一个想法。