首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IBAction阵列

IBAction阵列
EN

Stack Overflow用户
提问于 2015-12-27 10:49:40
回答 3查看 225关注 0票数 1
代码语言:javascript
复制
- (IBAction)buyHouse[6]:(id)sender;

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

代码语言:javascript
复制
 - (IBAction)buyHouse[3]:(id)sender{
   _Price.text = [NSString formatWithString: @"hello"];
}

这个IBAction是针对许多UIButton的。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-27 10:55:47

既然Objective是如此动态,那么只需知道一个方法的名称,就可以调用它:

MyClass.m:

代码语言:javascript
复制
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.
票数 2
EN

Stack Overflow用户

发布于 2015-12-27 12:01:09

可以使用块而不是方法。

用于匹配IBAction签名的块。在本例中未使用。

代码语言:javascript
复制
typedef void(^IBActionBlock)(id sender);

定义您的操作数组。数组中的每个条目都是以单个对象作为参数的块。

代码语言:javascript
复制
NSArray *ibActions = @[
                       ^(id sender) {
                           // 0
                       },
                       ^(id sender) {
                           // 1
                       },
                       ^(id sender) {
                           // 2
                       },
                       ^(id sender) {
                           // 3
                       },
                       ^(id sender) {
                           // 4
                       },
                       ^(id sender) {
                           // 5
                       },
                      ];

例如呼叫站点。

代码语言:javascript
复制
ibActions[2](button);
票数 0
EN

Stack Overflow用户

发布于 2015-12-27 12:02:18

您可以使用标记并利用performSelector来完成这一任务:

  1. 您可以在IB中为按钮分配标记。那就是指数
  2. 您将有一个名为IBAction的buyHouseByTag,然后将所有按钮连接到该方法
  3. 你会有buyHouse1,buyHouse2 ..。

buyHouseByTag是您的代理:

代码语言:javascript
复制
- (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 {
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34479682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档