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
}
Другие вопросы по тегам