IBAction и кнопки программно
Я создаю кнопки программно, и затем я хочу добавить функциональность, при которой, когда они нажимаются / нажимаются, они остаются выделенными, если не нажать снова. Сейчас я создаю кнопки, а затем пытаюсь добавить IBAction. Однако проблема в том, что у меня есть создание кнопки в методе, и тогда я не уверен, как ссылаться на кнопку в моем IBAction. Вот мой код:
UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom];
[testButn setFrame:CGRectMake(0, 135, 40, 38)];
[testButn setImage:[UIImage imageNamed:@"test_butn_un.png"] forState:UIControlStateNormal];
[testButn setImage:[UIImage imageNamed:@"test_butn_pressed.png"] forState:UIControlStateHighlighted];
[testButn addTarget:self action:@selector(staypressed:) forControlEvents:UIControlEventTouchUpInside];
[self.contentview addSubview:testButn
-(IBAction)staypressed:(id)sender{
//Not sure what to do here, since this method doesn't recognize testButn, How do I reference testButn
3 ответа
Отправитель testButn. Вы должны изменить тип аргумента stayPressed с (id) на (UIButton *)
Если метод действия не связан с несколькими различными классами объектов, лучше заменить идентификатор на любой класс объекта, который вы используете. Это может быть полезно, если вы подключаете вещи в IB, так как это не позволит вам подключить их к неправильному виду объекта.
Тот факт, что он не работает, не потому, что он не распознает вашу кнопку. Ваш подход неверен. Я думаю, что вам нужно подключить действие, чтобы приземлиться, и, возможно, установить выбранное состояние на ДА. В определении вашей кнопки вам нужно установить imageForState: для выбранного состояния. То, как вы делаете это сейчас, этот метод не вызывается до подправки.
Что-то вроде этого:
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom];
[testButn setFrame:CGRectMake(0, 135, 40, 38)];
[testButn setImage:[UIImage imageNamed:@"New_PICT0019.jpg"] forState:UIControlStateNormal];
[testButn setImage:[UIImage imageNamed:@"New_PICT0002.jpg"] forState:UIControlStateSelected];
[testButn addTarget:self action:@selector(stayPressed:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:testButn];
}
-(void)stayPressed:(UIButton *) sender {
if (sender.selected == YES) {
sender.selected = NO;
}else{
sender.selected = YES;
}
}
UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom];
[testButn setFrame:CGRectMake(0, 135, 40, 38)];
[testButn setImage:[UIImage imageNamed:@"test_butn_un.png"] forState:UIControlStateNormal];
[testButn setImage:[UIImage imageNamed:@"test_butn_pressed.png"] forState:UIControlStateHighlighted];
[testButn addTarget:self action:@selector(staypressed:) forControlEvents:UIControlEventTouchUpInside];
testButn.tag = 1;
[self.contentview addSubview:testButn
-(IBAction)staypressed:(id)sender
{
if ([sender tag]==1)
{
somecodes...
}
}
Тебе нужно разыграть отправителя в UIButton.
- (IBAction)staypressed:(id)sender
{
UIButton *theButton = (UIButton*)sender;
//do something to theButton
}