IBAction 数组

Array of IBAction

- (IBAction)buyHouse[6]:(id)sender;

我想通过执行上面显示的操作来制作一个 IBActions 的数组。它不允许我。是否可以制作一个方法数组,如果我想实现它,我只需要这样做。

 - (IBAction)buyHouse[3]:(id)sender{
   _Price.text = [NSString formatWithString: @"hello"];
}

这个 IBAction 适合很多人 UIButton

这是我的第一个问题,所以如果它含糊不清,我真的很抱歉。我对 Objective-C 和这个社区还很陌生。

由于 Objective-C 是如此动态,您只需知道其名称即可调用方法:

MyClass.m:

static NSArray *_methods = nil;

@implementation MyClass

-(id)init
{
    self = [super init];
    if (self) {
        if (!_methods) {
            _methods = @[
                @"method1:",
                @"method2:",
                @"method3:"
            ];
        }
    }
    return self;
}

- (void)callMethod:(NSUInteger)index forSender:(id)sender
{
    SEL selector = NSSelectorFromString(_methods[index]);
    [self performSelector:selector withObject:sender];
}

- (IBAction)method1:(id)sender
{

}

// etc.

您可以使用块而不是方法。

与 IBAction 签名匹配的块的便捷 typedef。本例中未使用。

typedef void(^IBActionBlock)(id sender);

定义您的一系列操作。数组中的每个条目都是一个块,它将单个对象作为参数。

NSArray *ibActions = @[
                       ^(id sender) {
                           // 0
                       },
                       ^(id sender) {
                           // 1
                       },
                       ^(id sender) {
                           // 2
                       },
                       ^(id sender) {
                           // 3
                       },
                       ^(id sender) {
                           // 4
                       },
                       ^(id sender) {
                           // 5
                       },
                      ];

调用站点示例。

ibActions[2](button);

您可以使用标签并利用 performSelector 来做到这一点:

  1. 您可以为按钮分配标签[您可以在 IB 中这样做。那就是索引]

  2. 你有一个名为 buyHouseByTag 的 IBAction,然后你会将所有按钮连接到那个方法

  3. 你有 buyHouse1, buyHouse2 ....


buyHouseByTag 是您的代理人:

- (IBAction)buyHouseByTag:(id)sender {
    NSInteger index = [sender tag];
    NSString *method = [NSString stringWithFormat:@"buyHouse%d:", index];
    SEL sel = NSSelectorFromString(method)
    [self performSelector:sel withObject:sender];
}

- (IBAction)buyHouse0:(id)sender {
}
- (IBAction)buyHouse1:(id)sender {
}
- (IBAction)buyHouse2:(id)sender {
}