2013-08-28 16 views
8

Ho un UIScrollView con alcune sottoview e così via. Sono anche lo scrollView delegate e ho implementato lo - (void)scrollViewDidScroll:(UIScrollView *)scrollView. Sotto il mio rotolo c'è un'altra vista.Annulla corrente UIScrollView touch

voglio dimostrare questo punto di vista, se lo ScrollView contentOffset va sotto 50px sull'asse x, "reset" ScrollView di contentOffset ed annullare il gesto ScrollView corrente in modo che l'utente abituato manipolare il suo contenuto quando viene visualizzata la nuova vista.

Ho implementato il metodo in questo modo:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.x < -50) 
    { 
     scrollView.contentOffset = CGPointZero; 
     [self showBackView]; 
     //here I want to cancel the current touch on the scrollview since it keeps scrolling if I drag my finger 
    } 
} 

ho cercato di impostare la proprietà userInteractionEnabled-NO ma ha effetto solo dopo che il tocco è terminato. E ho provato un sacco di altre proprietà, ma nessuna sembra funzionare.

Come posso risolvere questo?

+0

hai provato a impostare 'scrollEnabled' su NO? –

+0

Sì, non ha funzionato. Disabilitare il pan gesture recogniser fa il lavoro. – Majster

risposta

31

Provare a disabilitare panGestureRecognizer per la vista di scorrimento (e quindi riattivare). Questo annullerà la sessione corrente del riconoscitore:

self.scrollView.panGestureRecognizer.enabled = NO; 
self.scrollView.panGestureRecognizer.enabled = YES; 
+1

Questo è fantastico. Ho avuto uno scenario con un 'UITableView' con un' UIRefreshControl' che, una volta abbattuto, ha fatto una chiamata API. Nel caso in cui la chiamata API fosse errata, c'era un dialogo di avviso. Il problema era che il tuo tocco era ancora su "UITableView" in modo da poter interagire e chiamare un'altra chiamata API che non volevamo. Ora con l'evento tattile 'UITableViews' annullato, l'utente non può interagire con la vista tabella sottostante a causa dell'avviso. – micnguyen