In Very short snippet: rimuovere lo scroll da un oggetto UIWebView avevamo visto come era possibile rimuovere lo scroll da un oggetto UIWebView:
1 2 3 4 | id scrollView = [[webView subviews] lastObject]; if([scrollView respondsToSelector:@selector(setScrollingEnabled:)]) { [scrollView performSelector:@selector(setScrollingEnabled:) withObject:NO]; } |
Apple, tuttavia, grazie ai tool che usa per controllare gli eseguibili inviati, potrebbe rifiutare l’applicazione, come è accaduto a me. Il motivo è l’uso della proprietà setScrollingEnabled che risulta essere privata. In effetti il controllo UIScrollView espone la proprietà scrollEnabled, che è pubblica, documentata e liberamente utilizzabile, sia da codice che da Interface Builder.
Ecco quindi un aggiornamento alla funzione proposta:
1 2 | UIScrollView *scrollView = [[webView subviews] lastObject]; scrollView.scrollEnabled = FALSE; |








7
La questione è che nella versione iOS 3.1.3, ad esempio, l’oggetto
UIWebViewnon contiene unUIScrollViewma bensì un oggetto non documentatoUIScroller. Tale oggetto, che funziona comunque da scroller, non risponde al selettorescrollEnabledbensì ascrollingEnabled, anch’esso non documentato! Per questo motivo le applicazioni vengono rifiutate.Per superare il problema si potrebbe usare il codice:
2
3
4
5
6
7
8
9
10
id scrollView = [[webView subviews] lastObject];
if ([scrollView respondsToSelector:@selector(scrollEnabled:)]) {
// > 3.1.3
[scrollView performSelector:@selector(scrollEnabled:) withObject:NO];
} else {
// no comment...
SEL m = NSSelectorFromString([NSString stringWithFormat:@"%@%@%@%@%@%@%@", @"set", @"Scr", @"olli", @"ng", @"Ena", @"bled", @":"]);
[scrollView performSelector: m withObject:NO];
}