2010-04-07 13 views
7

Mam UIView, który zawiera UIScrollView i chcę być w stanie przechwycić zdarzenia "Touch Down" w UIView każdym razem użytkownik klika na UIScrollView.Jak wykryć "Touch Down" w superview UIScrollView?

Próbowałem włączyłem wszystkie dotknięcia Objęte/zakończone/Anulowane procedury obsługi w moim UIViewController, ale żaden z nich nie zostanie zwolniony po dotknięciu wewnątrz UIScrollView zawartych w głównym UIView.

Jaki jest najlepszy sposób, aby to osiągnąć?

Odpowiedz

2

W UIView, wdrożyć touchesBegan:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    // assign a UITouch object to the current touch 
    UITouch *touch = [[event allTouches] anyObject]; 

    // if the view in which the touch is found is myScrollView 
    // (assuming myScrollView is the UIScrollView and is a subview of the UIView) 
    if ([touch view] == myScrollView) { 
     // do stuff here 
    } 
} 

Na marginesie: upewnić userInteractionEnabled jest ustawiona na yes w UIView.

+0

A za moim samodzielnego odpowiedź poniżej, sprawiają użytkownikowi userInteractionEnabled = NIE dla przewijania – wgpubs

+3

To jest sprzeczne z celem uiscrollview, ponieważ musimy zaimplementować operację przewijania w "wykonaj tutaj". –

-2

trzeba wyłączyć interakcję użytkownika z widoku przewijania jako takiego ...

scrollView.userInteractionEnabled = NO; 

Po wyłączeniu superview w UIScrollView dostaje zdarzenie touchesBegan.

+1

To pogarsza cel posiadania widoku przewijania w pierwszej kolejności. – Zorayr

1

Można także wdrożyć hitTest:withEvent: w podklasie UIView. Ta metoda jest wywoływana w celu określenia, które subview ma otrzymać zdarzenie dotyku. Możesz więc albo śledzić wszystkie zdarzenia przechodzące przez Twój widok, albo ukryć niektóre zdarzenia z subviews. W takim przypadku może nie być konieczne wyłączanie interakcji użytkownika z przewijaniem.

Zobacz więcej informacji na temat tej metody w odniesieniu do klasy UIView.

1

Do swojego superużytku możesz również dodać rozpoznawacz gestów. Na przykład gest z kranu, jeśli chcesz aktywować/dezaktywować rzeczy jak przyciski nakładanie widoku przewijania:

self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease]; 
tap.numberOfTapsRequired = 1; 

["containerView" addGestureRecognizer:tap]; 

Gesty zrobić zachować interakcji widok przewijania

+0

tapgesturerecognizer wykrywa tylko TAPS (touchdown + touchUp). Tak więc jest to teraz to, czego chcemy w wykrywaniu zdarzeń typu touchdown. –

Powiązane problemy