Добавление массива кнопок UIB в iOS
Я хотел бы добавить 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 ответа
Я бы посоветовал назначить один и тот же селектор для всех кнопок. Указатель на кнопку будет отправлен на этот селектор, и вы можете узнать, какая кнопка была нажата с помощью .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];
вне вашей петли.
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];
}
@selector ожидает метод, а не объект
ты должен делать как
- (void)onClick:(UIBUtton*)sender {
if(sender.tag == 1) {
// ....
}
}
button.tag = i;
[button addTarget:self action:@selector(onClick)