IBAction数组

时间:2015-12-27 10:49:41

标签: objective-c arrays methods ibaction

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

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

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

IBAction适用于许多UIButton

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

3 个答案:

答案 0 :(得分:2)

由于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.

答案 1 :(得分:0)

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

与IBAction签名匹配的块的Handy 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);

答案 2 :(得分:0)

您可以使用标签并利用performSelector:

来执行此操作
  1. 你要为按钮分配标签[你可以在IB中这样做。那就是索引]

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

  3. 你有buyHouse1,buyHouse2 ....

  4. 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 {
    }