Я пытаюсь добавить действие к кнопкам, которые создаю программно:
[btn addTarget:self
action:@selector(indexAction)
forControlEvents:UIControlEventTouchUpInside];
Это отлично работает. Однако теперь я хочу передать переменную (int k) в метод indexAction. Я не мог заставить это работать:
[btn addTarget:self
action:@selector([self indexAction:k])
forControlEvents:UIControlEventTouchUpInside];
Я уверен, что делаю что-то не так. Это контекст приведенного выше кода:
-(void) initIndexButtons {
float buttonPadding = -8;
float buttonWidth = 23;
float buttonHeight = 80;
CGRect frame = CGRectMake(0,0,0,0);
for (int k=0;k<5;k++)
{
UIButton* btn = [[UIButton alloc] initWithFrame:frame];; btn.tag = k;
btn.frame = CGRectMake(0, k*(buttonPadding+buttonHeight), buttonWidth, buttonHeight);
UIImage *newImage = [UIImage imageNamed:@"index.png"];
[btn setBackgroundImage:newImage forState:UIControlStateNormal];
[btn addTarget:self
action:@selector(self indexAction:k)
forControlEvents:UIControlEventTouchUpInside];
}
}
-(void)indexAction:(int *)buttonTag
{
NSLog(@"buttonTag: %i", buttonTag);
}
EDIT:
Я изменил свой код на:
// ...
[btn addTarget:self
action:@selector(indexAction:)
forControlEvents:UIControlEventTouchUpInside];
//[self indexAction:k];
[indexView addSubview:btn];
[indexView sendSubviewToBack:btn];
}
}
-(void)indexAction:(id)sender
{
NSInteger *tid = ((UIControl *) sender).tag;
NSLog(@"buttonTag: %i", tid);
}
Но теперь я получаю предупреждение, что «Инициализация делает указатель из целого числа без приведения к строке NSInteger *tid = ((UIControl *) sender).tag;
EDIT:
Это правильная строка кода:
NSInteger tid = ((UIControl*)sender).tag;