Я хочу программно добавить несколько 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: какая кнопка была нажата? Я хотел бы передать данные тега, если это возможно, для идентификации кнопки.
Вы можете либо сохранить ссылку на фактический объект кнопки где-нибудь, что имеет значение (например, массив), либо установить для тега кнопки что-то полезное (например, смещение в какой-то другой массив данных). Например (с помощью тега, поскольку это обычно необходимо):
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]);
}
UIButton имеет свойство tag
. Используйте это и в своем методе buttonClicked
, вы можете проверить кнопку, по которой был сделан щелчок, на основе ее тега. Возможно, захочется сохранить константы для того, какая кнопка есть что.
Вы можете назначить тег для кнопки.
button.tag = i;
Затем в -buttonClicked:
проверьте тег отправителя:
-(void)buttonClicked:(UIButton*)sender {
int tag = sender.tag;
...
}
Для каждого из ваши кнопки устанавливают соответствующий тег, а затем ссылаются на тег в вашем действии. т.е.
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
...
button.tag = 1
[view addSubview:button];
Вы можете легко установить тег на основе индекса вашей итерации, если вы создаете кнопки в цикле. А затем в вашем действии:
- (void)aButtonWasTapped:(UIButton *)source {
if( source.tag == 1 ) {
// etc
}
}