Можно ли изменить действие для UIButton? - PullRequest
5 голосов
/ 09 января 2012

Я пытаюсь изменить действие для UIButton в приложении ios.Я сделал следующий код

 button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [button addTarget:self  action:@selector(aMethodShow:) forControlEvents:UIControlEventTouchDown];

    [button setTitle:@"Show View" forState:UIControlStateNormal];

    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);

    [view addSubview:button];

В конкретном разделе я хочу изменить действие для этой кнопки. Так я сделал это

[button addTarget:self  action:@selector(aMethodHide:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Hide View" forState:UIControlStateNormal];

К сожалению, этот кодекс работает?

Ответы [ 4 ]

17 голосов
/ 09 января 2012

Я предлагаю перед добавлением новой цели сначала вызвать removeTarget для UIbutton объекта, затем добавить новую цель с другим действием.

9 голосов
/ 03 августа 2015

Я думаю, что это поможет вам

[yourButton removeTarget:nil 
               action:NULL 
     forControlEvents:UIControlEventAllEvents]; 

[yourButton addTarget:self 
               action:@selector(yourAction:)
     forControlEvents:UIControlEventTouchUpInside];
2 голосов
/ 09 января 2012

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

-(void)btnAction
{
        if(target1)
          {
            // code for target 1
          }

        else
         {
          // code for target 2
         }

}

Здесь target1 - это значение BOOL, значение которого сначала устанавливается равным YES И измените его значение NO всякий раз, когда вы хотите выполнить код цели 2.

Надеюсь, это поможет Вам.

0 голосов
/ 04 февраля 2015

Я недавно сделал приложение, и у меня была такая же ситуация, но я нашел другой способ ее решить, поэтому решил поделиться своим решением с людьми, которые могут быть в такой же ситуации.

Я попробуючтобы объяснить, что я сделал с контекстом этого вопроса:

  • Я добавил тег к button и связал его с одной из функций, которые button должен вызывать (aMethodShow: например).

  • button всегда вызывают одну и ту же функцию (например, callSpecificFunc:).callSpecificFunc: вызывает функцию aMethodShow: или aMethodHide в соответствии с текущим тегом button.

  • В определенном разделе, в котором button необходимо вызватьдругую функцию, я изменяю только тег button.

Примерно так:

NSInteger tagOne = 1000; //tag associated with 'aMethodShow' func
NSInteger tagTwo = 1001; //tag associated with 'aMethodHide' func

button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self  action:@selector(callSpecificFunc:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[view addSubview:button];

...
// in some part of code, if we want to call 'aMethodShow' function,
// we set the button's tag like this
button.tag = tagOne

...

//Now, if we want to call 'aMethodHide', just change the button's tag
button.tag = tagTwo

...

-(void) callSpecificFunc:(UIButton*)sender
{
    NSInteger tagOne = 1000;
    NSInteger tagTwo = 1001;

    if([sender tag] == tagOne){ 
        //do whatever 'aMethodShow' does
    }else {
        //do whatever 'aMethodHide' does
    }
}

Конечно, его можно применять для более чем 2 функций:)

...