2012-01-09 14 views
5

Sto provando a cambiare Azione per UIButton in ios applicatio. Ho fatto seguente codiceÈ possibile modificare l'azione per UIButton?

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]; 

In particolare la sezione Voglio cambiare Azione per questo pulsante .Quindi ho fatto questo

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

Purtroppo Questa nota codice di lavoro?

+0

aMethodShow sta lavorando per la prima volta? aMethodHide non funziona quando lo cambi? –

+0

due azioni stanno prendendo lo stesso evento (clic) per il pulsante, come posso rimuovere il primo obiettivo. –

+0

Intendi dire che, quando fai clic, entrambi i metodi vengono richiamati? –

risposta

17

Suggerisco prima di aggiungere un nuovo target, prima invocare removeTarget su UIbutton quindi aggiungere un nuovo target con un'altra azione.

+0

It Working Fine, Why this Action Invocato per lo stesso evento –

2

È possibile utilizzare lo stesso obiettivo dell'azione anziché utilizzare due obiettivi. In un bersaglio si deve differenziare come qui di seguito

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

     else 
     { 
      // code for target 2 
     } 

} 

Qui target1 è BOOL valore che il valore impostato prima di essere YES. E cambiare il suo valore NO ogni volta che si desidera eseguire il codice di destinazione 2.

Spero che questo ti possa aiutare.

+0

Se non desidero controllare la condizione, se sto impostando target più di una volta con un altro selettore (showButton, HideButton, ecc.) Tutta l'azione invocata simultaneamente .. perché questo è successo? –

0

Ho fatto un'app di recente e ho avuto la stessa situazione, ma ho trovato un altro modo per risolverlo, quindi ho deciso di condividere la mia soluzione con persone che potrebbero trovarsi nella stessa situazione.

Cercherò di spiegare quello che ho fatto con il contesto di questa domanda:

  • ho aggiunto un tag per l'button e ho associato con una delle funzioni che button deve chiamare (aMethodShow: per esempio).

  • button chiamare sempre la stessa funzione (callSpecificFunc: ad esempio). Quello che callSpecificFunc: fa è chiamare la funzione aMethodShow: o aMethodHide in base all'attuale tag button.

  • Nella sezione particolare in cui lo button deve chiamare una funzione diversa, cambio solo il tag di button.

Qualcosa di simile a questo:

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 
    } 
} 

Certo che potrebbe essere applicato per più di 2 funzioni :)

8

penso che vi aiuterà a

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

[yourButton addTarget:self 
       action:@selector(yourAction:) 
    forControlEvents:UIControlEventTouchUpInside]; 
Problemi correlati