如何使用Objective-C

时间:2015-05-25 02:51:50

标签: ios objective-c

我想用Objective-C动态声明/创建20个方法。这些方法将添加到动作侦听器中。这些方法的实现几乎相同,只会有一些差异。但我不想写这些方法20次。我知道如何将方法块存储到数组中,但是我无法将这些方法传递给动作侦听器。这就是我所拥有的:

NSMutableArray *arr = [NSMutableArray new];
[arr addObject:^(){NSLog(@"my block");}];
id (^ myblock)() = [arr objectAtIndex:0];

sel_registerName("myblock");

[numPad addTarget:self action:@selector(myblock) forControlEvents:UIControlEventTouchUpInside];

注意动作参数需要一个选择器,但是我收到一个错误,因为@selector里面的'myblock'不会返回任何内容,因为'myblock'还没有被声明。

有没有人有解决方案?

1 个答案:

答案 0 :(得分:1)

如果你真的,真的需要在运行时创建目标/操作目标,最简单的解决方案是使用NSBlockOperation。 E.g。

NSMutableArray *blockOperations = [NSMutableArray new];
for(int i = 0; i < 20; i++) {

    NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"I am listener %d", i);
    }];

    [blockOperations addObject:blockOperation];
    [numPad addTarget:blockOperation action:@selector(start) forControlEvents:UIControlEventTouchUpInside];
}

虽然如果您的目标被称为numPad,您可能想要做的是将所有单个按钮连接到相同的目标,并为它们提供代表其值的标记。 E.g。

- (void)numPadButtonAction:(UIView *)sender {
    NSLog(@"user pressed button with tag %@", @(sender.tag));
}
相关问题