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

Posted

技术标签:

【中文标题】在 IBAction 方法中调用的完成处理程序【英文标题】:Completion Handler called in IBAction Method 【发布时间】:2016-12-13 12:27:11 【问题描述】:

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

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

我猜,他们正在为该按钮添加取消按钮和操作方法。他们已将块声明为

typedef void (^simpleBlock)(void);

@property (nonatomic, copy) simpleBlock simpleBlock;

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

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

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

【问题讨论】:

【参考方案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);
    

每当按钮单击此块时,都会使用 class 的对象进行初始化,

当我们想要动作时,无需在类文件中编写动作代码,只需在初始化类的地方编写代码即可,例如在 cellforrow atIndexpath 中

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

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

if(self.openLikesTapAction) 
     self.openLikesTapAction(self);
  

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

【讨论】:

以上是关于在 IBAction 方法中调用的完成处理程序的主要内容,如果未能解决你的问题,请参考以下文章

调用 prepareForSegue 而不是 ib 按钮

在代码中调用 IBAction 并发送标签

为啥将 IB Action 设置为作为对象退出?

IBAction 方法未在 viewDidLoad 方法中调用?

有时在 UIGestureRecognizer 处理程序后未触发 IBAction

iOS小技能(开发规范): app的开发步骤