2013-04-04 6 views
5

Ho alcuni UIButtons all'interno di un UIScrollView, ma non voglio ritardare il tocco del pulsante. Tuttavia, non appena la vista di scorrimento rileva un trascinamento/scorrimento, voglio annullare il tocco di UIButton e procedere allo scorrimento di UIScrollView.iOS UIScrollView annulla UIButton touch on scroll

Ho compreso il seguente ...

_scrollView.delaysContentTouches = NO; 

... ma (ovviamente) il tocco tasto non cancella quando trascinati. Qualcuno ha qualche suggerimento su come posso implementare questa funzionalità?

risposta

7

È possibile sovrascrivere questo metodo di UIScrollView.

-(BOOL)touchesShouldCancelInContentView:(UIView *)view 
{ 
    return YES; 
} 

E in UIButton, è necessario aggiungere un metodo diverso per diversi eventi di controllo.

  1. mostra l'effetto di evidenziazione per UIControlEventTouchDown.
  2. pulsante di attivazione per UIControlEventTouchUpInside | UIControlEventTouchUpOutside;
  3. chiaro effetto di evidenziazione per UIControlEventTouchCancel.
+1

Questa è la soluzione desiderata. Grazie. – lucien

+0

UIControlEventTouchCancel era l'unica notifica che mancava e funzionava. Grazie! – cgossain

1

È possibile utilizzare scrollViewWillBeginDragging per attivare una notifica e gestire l'annullamento del pulsante ascoltandolo nel codice dei pulsanti. Penso che questo sia quello che stai cercando di fare, ma non sono sicuro di aver capito correttamente la tua domanda.

+0

Grazie per il vostro feedback. Ho provato scrollViewWillBeginDragging ma non si attiva se si tocca un pulsante prima di scorrere. Quello che voglio è toccare un pulsante, ma non avere alcun ritardo. Quindi, se muovi il dito mentre è ancora abbassato, annulla il pulsante e inizia a scorrere. – lucien

+0

Prova questo nella schermata iniziale di iOS ... tocca su un'app e noterai che si scurisce, ma non appena trascini il dito cancella il tocco e scorre invece – lucien

+0

Quindi vuoi che il pulsante si spenga immediatamente un'azione ma quando la vista di scorrimento viene trascinata per annullare? E una volta premuto un pulsante, quindi trascinare, scrollViewWillBeginDragging non viene chiamato? Buon esempio con la homescreen. – Psiticosis