2012-04-02 11 views
7

Mam UIScrollView z stronicowania włączone tak:zawartość UIScrollView niepozwalające na interakcję użytkownika

container = [[UIScrollView alloc] initWithFrame:kScrollViewFrame]; 
[container setDelegate:self]; 
[container setShowsHorizontalScrollIndicator:YES]; 
[container setShowsVerticalScrollIndicator:NO]; 
[container setClipsToBounds:YES]; 
[container setPagingEnabled:YES]; 
[container setDecelerationRate:UIScrollViewDecelerationRateFast]; 
[container setBounces:NO]; 
[container setUserInteractionEnabled:NO]; 
[container setCanCancelContentTouches:NO]; 
[container setDelaysContentTouches:NO]; 

Do tej UIScrollView, dodaję kilka UIWebViews i ustawić ich interakcji włączona do tak jak tak.

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 

     self.frame = frame; 
     self.userInteractionEnabled = YES; 
    } 
    return self; 
} 

który łamie stronicowanie i wszystkie dotknięcia na UIScrollView. Jeśli ustawię opcję interakcji użytkownika na NIE, strona działa, ale nie mogę podświetlić tekstu w interfejsie UIWebView. Próbowałem subclassing UIScrollView jak poniżej, ale te same okoliczności występują. Dowolny pomysł?

- (id)initWithFrame:(CGRect)frame 
{ 
    NSLog(@"init"); 
    return [super initWithFrame:frame]; 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"touchesBegan"); 

    [[self nextResponder] touchesBegan:touches withEvent:event]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"touchesMoved"); 

    [[self nextResponder] touchesMoved:touches withEvent:event]; 
} 

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"touchesEnded"); 
    [[self nextResponder] touchesEnded:touches withEvent:event]; 
} 
+0

Co chcesz osiągnąć, czy potrzebujesz przewijania widoku przewijania, przewijania widoku strony, stronicowania, wybierania? Proszę być bardziej konkretnym. –

+0

Potrzebuję widoku przewijania do strony, a użytkownik może wybrać tekst na stronach internetowych (które są subskrybami przewijania). Widok WWW nie musi być przewijany, wystarczy, że zaznaczony zostanie jego tekst. –

+0

Edytowałem swoją odpowiedź, aby odzwierciedlić Twoje wymagania, wydaje się, że działa ona dla mnie. –

Odpowiedz

10

Wyłączenie interakcji użytkownika z pojemnikiem skutecznie wyłącza ją również w subviewsach. Powinieneś go włączyć, powodując propagację zdarzenia dotyku w dół hierarchii widoków;

[container setUserInteractionEnabled:YES]; 

Jeśli chcesz wyłączyć przewijanie na UIWebView tylko dostać się do środka jego UIScrollView

yourWebView.scrollView.scrollEnabled = NO; 

Przetestowałem to na moim urządzeniu i mogę obie „strony poprzez” z UIScrollView i zaznaczyć tekst na UIWebView.

EDYTOWANIE:

Mam to działa! Musisz także pozwolić na anulowanie dotknięcia:

[container setCanCancelContentTouches:YES]; 
+0

Próbowałem tego i podział użytkownika interakcji na stronach internetowych, które są dzieci przewijania. –

+0

Próbowałem tego i nie mogę już przewijać, nawet, że rozmiar treści wyskakującego widoku wynosi 10.000px, a ramka jest ustawiona na szerokość/wysokość ekranów (768 x 1024). Edycja: Właściwie działa, jeśli przytrzymam przez kilka sekund i spróbuj przesunąć. To bardzo trudne do strony. Czy napotykasz ten problem? –

+0

Skorzystałem z funkcji rozpoznawania przesuwającego i sam ożywiłem stronicowanie. –

Powiązane problemy