在iOS中添加UIButtons数组

时间:2014-10-14 13:40:21

标签: ios objective-c uibutton

我想使用for循环添加UIButton。每个按钮都有不同的动作。 我的代码是:

NSArray *methods = [[NSArray alloc]initWithObjects:@"1",@"2", @"3", @"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15", nil];
int x=0;
for (int t=0;t<=14;t++) {
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self action:@selector([methods[t]]) forControlEvents:UIControlEventTouchUpInside];
    [button setTitle:@"" forState:UIControlStateNormal];
    button.frame = CGRectMake(275, x+8, 28, 16);
    [button setBackgroundColor:[UIColor colorWithRed: 10.0/255.0f green:100.0/255.0f blue:150.0/255.0f alpha:1.0f]];
    button.layer.cornerRadius = 10;
    [button setBackgroundImage:[UIImage imageNamed:@"Plus"] forState:UIControlStateNormal];
    [segmentedView1 addSubview:button];
    [self.view addSubview:segmentedView1];
    x+=20;
}

发现错误: "Expected identifier" in the line [button addTarget:self action:@selector([methods[t]])

另外,如何以编程方式添加这些按钮的插座?

任何解决方案? 谢谢

3 个答案:

答案 0 :(得分:2)

我建议为所有按钮指定相同的选择器。指向该按钮的指针将发送到此选择器,您可以使用.tag属性识别按下了哪个按钮。

for (int t=0;t<=14;t++) {
   ...
   [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
   button.tag = i;
}

- (void)buttonPressed:(id)sender {
   if (((UIButton *)sender).tag == 1) {
      ... 
   }
   ...
}

同时将[self.view addSubview:segmentedView1];移出您的循环。

答案 1 :(得分:1)

NSString *selectorName = methods[t];
SEL method = NSSelectorFromString(selectorName);

[button addTarget:self action:method forControlEvents:UIControlEventTouchUpInside];
不要忘记,你必须实现所有这些选择器,如果你将方法保留在阵列中,它可能存在风险。我建议对所有按钮使用一个操作,并通过操作中的tag属性处理它。

如果没有,请尝试换行:

if ([self respondsToSelector:method]) {
    [button addTarget:self action:method forControlEvents:UIControlEventTouchUpInside];
}

答案 2 :(得分:0)

@selector需要一个方法,而不是一个对象

你必须这样做

- (void)onClick:(UIBUtton*)sender {
    if(sender.tag == 1) {
        // ....
    }
}

button.tag = i;
[button addTarget:self action:@selector(onClick)