2010-04-23 8 views
6

Moja aplikacja ma numer UITableView. Ten UITableView ma widok nagłówka, który jest UIWebView.UITableView's, UIWebViews i ScrollsToTop Property = Trouble

Domyślnie widok przewijania ma ustawioną właściwość scrollsToTop na YES, co umożliwia użytkownikowi dotknięcie paska stanu w celu przewinięcia do góry widoku przewijania.

Jeśli w jednym widoku są osadzone dwa widoki przewijania, oba mają ustawioną właściwość scrollsToTop na YES, naciśnięcie paska stanu nic nie robi.

Rozwiązaniem jest ustawienie jednej z właściwości scrollsToTop na . To ponownie włącza dotykanie paska stanu.

Problem jest następujący: UIWebView nie wyświetla widoku przewijania, w wyniku czego nie ma dostępu do jego właściwości scrollsToTop. Chcę tylko, aby widok tabeli przewijał się do góry po dotknięciu paska stanu, a nie widoku sieci.

Czy ktoś wie, jak mogę to osiągnąć?

Odpowiedz

3

Jest obecnie własność Scrollview, który jest korzystny:

myWebView.scrollView.scrollsToTop = YES; 
0

Czy wypróbowałeś metodę delegata z UIScrollViewDelegate scrollViewShouldScrollToTop?

+0

Wygląda na to, że nie działa. Początkowo próbowałem implementować tę metodę obok metod UIWebViewDelegate, ale nie sądziłem, że to zadziała, ponieważ widok sieciowy sam jest delegatem widoku przewijania, a nie delegatem widoku WWW. Więc podklasowałem UIWebView i zaimplementowałem, ale wciąż nie miałem szczęścia. To nie działa. – Jasarien

+0

Dalsze badania: Wygląda na to, że samo UIWebView nie odpowiada na metody delegatów przewijania. Być może jakiś inny obiekt wewnętrzny jest delegatem widoku przewijania? – Jasarien

3

To pytanie zawiera odpowiedź:

iPhone OS: Tap status bar to scroll to top doesn't work after remove/add back

nie mogłem znaleźć go wcześniej, ponieważ został poproszony w różny sposób i na nieco inny temat, ale wynik jest taki sam.

Wynikiem tego było przejście przez pod-widoki do momentu znalezienia widoku przewijania. Robiłem to wcześniej w innych aplikacjach i nie myślałem o tym w tym przypadku. Powinien być bezpieczny dla aplikacji, ponieważ mam aplikacje w sklepie, które korzystają z tego pomysłu.

kategorię po UIWebView, aby włączyć lub wyłączyć przewijanie do góry:

@implementation UIWebView (UIWebViewScrollToTopAdditions) 

- (void)setScrollsToTop:(BOOL)scrollsToTop 
{ 
    if ([[self subviews] count] > 0) 
    { 
     UIScrollView *scrollView = (UIScrollView *)[[self subviews] objectAtIndex:0]; 
     if ([scrollView respondsToSelector:@selector(setScrollsToTop:)]) 
     { 
      [scrollView setScrollsToTop:scrollsToTop]; 
     } 
    } 
} 

@end 
2

To się często zdarza, ponieważ wszystkie scrollviews mieć wartość domyślną . Po utworzeniu nowych przewijalnych widoków lub wyświetleń stron internetowych ustawiona zostanie opcja TAK na scrollsToTop. Napisałem prosty kategorię dla tej konkretnej kwestii:

-[UIScrollView makeOnlyThisScrollViewScrollToTopOnStatusBarTap]; 

https://gist.github.com/hfossli/6776203

Zasadniczo ustawia scrollsToTop do NO na wszystkich innych scrollViews niż ta, którą określasz + dbanie o wartości domyślnej. Powodzenia!

+1

To była jedyna rzecz, która zadziałała dla mnie. Powinien mieć więcej głosów w mojej opinii. Dzięki za to. –

+1

To działa idealnie! – Legnus