Добавьте несколько кнопки к представлению программно, назовите тот же метод, определите, какой кнопкой это было

Я хочу программно добавить несколько UIButtons к представлению - количество кнопок неизвестно во время компиляции.

Я могу сделать один или несколько UIButton's как так (в цикле, но закороченный для простоты):

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
       action:@selector(buttonClicked:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Button x" forState:UIControlStateNormal];
button.frame = CGRectMake(100.0, 100.0, 120.0, 50.0);
[view addSubview:button];

Копировал/Редактировал с этой ссылки: Как я создаю основной UIButton программно?

Но как делают я определяю в buttonClicked: какая кнопка была нажата? Я хотел бы передать данные тега, если это возможно, для идентификации кнопки.

28
задан Cœur 4 April 2017 в 12:29
поделиться

4 ответа

Вы можете либо сохранить ссылку на фактический объект кнопки где-нибудь, что имеет значение (например, массив), либо установить для тега кнопки что-то полезное (например, смещение в какой-то другой массив данных). Например (с помощью тега, поскольку это обычно необходимо):

for( int i = 0; i < 5; i++ ) {
  UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  [aButton setTag:i];
  [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
  [aView addSubview:aButton];
}

// then ...

- (void)buttonClicked:(UIButton*)button
{
  NSLog(@"Button %ld clicked.", (long int)[button tag]);
}
46
ответ дан 28 November 2019 в 03:01
поделиться

UIButton имеет свойство tag . Используйте это и в своем методе buttonClicked , вы можете проверить кнопку, по которой был сделан щелчок, на основе ее тега. Возможно, захочется сохранить константы для того, какая кнопка есть что.

0
ответ дан 28 November 2019 в 03:01
поделиться

Вы можете назначить тег для кнопки.

button.tag = i;

Затем в -buttonClicked: проверьте тег отправителя:

-(void)buttonClicked:(UIButton*)sender {
   int tag = sender.tag;
   ...
}
7
ответ дан 28 November 2019 в 03:01
поделиться

Для каждого из ваши кнопки устанавливают соответствующий тег, а затем ссылаются на тег в вашем действии. т.е.

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
...
button.tag = 1
[view addSubview:button]; 

Вы можете легко установить тег на основе индекса вашей итерации, если вы создаете кнопки в цикле. А затем в вашем действии:

- (void)aButtonWasTapped:(UIButton *)source {
    if( source.tag == 1 ) {
        // etc
    }
}
0
ответ дан 28 November 2019 в 03:01
поделиться