我想使用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]])
另外,如何以编程方式添加这些按钮的插座?
任何解决方案? 谢谢
答案 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)
你必须这样做
- (void)onClick:(UIBUtton*)sender {
if(sender.tag == 1) {
// ....
}
}
button.tag = i;
[button addTarget:self action:@selector(onClick)