所以,我一直在研究如何将块作为选择器传递给按钮,答案似乎比我需要的要复杂。
如果我将 UILabel 子类化为一个名为的方法doBlock;
和一个名为的块变量blockToDo
,并且所有方法都是调用blockToDo ();
,那么我不能这样做:
myLabel.blockToDo = ^myBlock;
[myButton addTarget: myLabel action: @selector (doBlock) forControlEvents: UIControlEventTouchUpInside];
或者这会让我陷入某种我不知道的麻烦?
编辑:所以,这里有两件事:我真正想做的事情,以及我提出的问题的答案。它们是不同的东西。
表达我的问题的另一种方式可能是将其一分为二。一半是“如果我想向 UILabel 添加一个简单的方法,我可以将其子类化并添加该方法,还是 UILable 的子类有义务做很多其他事情?” 另一半是“向doBlock;
子类添加方法似乎是将块作为选择器传递的最简单方法,但这些板上的所有建议似乎都是为此目的定义一个全新的类,这似乎是很多额外的工作。为什么?
似乎大多数人都解决了第二个问题,这是可以理解的,因为它实际上是所述原始问题中更明显的部分。
但是,至于我真正想做的事情:我最终要做的是定义一个具有doBlock;
方法的类别,并使用关联引用将^myBlock
ivar 存储在该类别中。这是非常通用的,因为我可以使用类别将块添加到任何类上,然后它会响应@selector (doBlock)
.
所以,我不知道如何结束这个。我提出的问题已得到部分回答,但事实证明,我真正想做的并不是与所提出的问题直接相关。我应该如何授予最佳答案?