2013-02-08 20 views
6

Ho una situazione in cui un utente sta toccando un UIButton e mentre potrebbero già toccarlo, devo essere in grado di cancellarlo o farlo fallire.Annulla tocco UIButton mentre lo si tocca

Ho provato a utilizzare button.enabled e userInteractionEnabled, ma nessuno dei due funziona al volo. Entrambi devono essere impostati prima che inizi il tocco.

Posso causare il fallimento del pulsante dopo e mentre viene toccato?

+0

stai tentando di annullare un processo in background o la presa diretta collegata al pulsante? – Bartu

risposta

0

Basta impostare una variabile BOOL che consenta o meno l'azione del pulsante e verificare dove necessario. Attivato e userinteractionenabled è solo quello di disabilitare tocchi in generale

+0

Ma come posso cancellare i tocchi dopo che il pulsante è già stato premuto? Con un bool riesco a mantenere il contatto dal fare qualsiasi cosa, ma continuerà a mostrare che viene toccato. – daveMac

0

Non sono sicuro circa il tuo problema, ma si può avere azioni differant sulla base di evento di controllo come qui di seguito

[button addTarget:self 
        action:@selector(onTouchUpInside:) 
      forControlEvents:(UIControlEventTouchUpInside)]; 

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

[button addTarget:self 
        action:@selector(onTouchUpOutside:) 
      forControlEvents:(UIControlEventTouchUpOutside)]; 

Vi prego di scusarmi se non è utile o cosa sei cercando.

+0

Apprezzo lo sforzo, ma non sono sicuro che sia quello che sto cercando. – daveMac

2

Una cosa che puoi fare per risolvere il tuo problema è personalizzare l'aspetto del pulsante in base alle tue esigenze. Usa: – setBackgroundImage:@"NormalStateImage.png" forState: UIControlStateNormal – setBackgroundImage:@"HighlightedStateImage.png" forState: UIControlStateHighlighted

impostare la proprietà adjustsImageWhenHighlighted NO e la proprietà adjustsImageWhenDisabled NO

+0

Questa è la mia soluzione attuale, ma sembra che dovrei essere in grado di annullare il tocco in qualche modo. – daveMac

+0

sei in grado di annullare il tocco. Ma devi gestirli diversamente. Devi implementare gli eventi rispondenti al tocco di UIResponder. Controlla questo documento Apple http://developer.apple.com/library/ios/#documentation/uikit/reference/UIResponder_Class/Reference/Reference.html e questo tutorial http://mobile.tutsplus.com/tutorials/iphone/ios -quick-tip-detect-touches/ – Luke

+0

Non sarebbe più semplice hitTest? – daveMac

6

È necessario registrare due azioni per il pulsante, uno per touch down e uno per ritocchi. In touch down è possibile decidere se si desidera annullare e in touch up scrivere la logica effettiva per la pressione del pulsante.

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

- (IBAction)touchDown:(id)sender 
{ 
    UIButton *b = (UIButton*)sender; 

    // Call this if you wish to cancel the event tracking 
    [b cancelTrackingWithEvent:nil]; 
} 
1

questo può essere fatto per qualsiasi UIButton. Se si desidera annullare il pulsante al momento l'utente atterra su di esso, questi passaggi dovrebbero funzionare:

  1. impostare il gestore per gli eventi in cui la cancellazione deve essere controllato. In questo caso, quando il pulsante è giù.

    [yourButton addTarget: self action: @selector (buttonIsDownHandler :) forControlEvents: UIControlEventTouchDown];

  2. Nel gestore, di decidere se annullare la stampa

    - (IBAction) buttonIsDownHandler: (id) {sender se (needToCancelThisPress) { [yourButton cancelTrackingWithEvent: nil]; }}

  3. gestore del pulsante per UIControlEventTouchCancel sarà chiamato dopo la cancellazione.

Il pulsante di cancellazione tocco può essere fatto in qualsiasi momento. Ad esempio, se si desidera tenere traccia quando l'utente preme e tiene premuto troppo a lungo, è possibile avviare un timer nel gestore UIControlEventTouchDown e quindi annullare il tocco quando il timer scade.

Problemi correlati