Добавление массива кнопок 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)
Другие вопросы по тегам