Private API nella rimozione dello scroll in un oggetto UIWebView

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;

Un commento a: “ ”

  1. 25 ott, 2010 Giovambattista Fazioli:

    La questione è che nella versione iOS 3.1.3, ad esempio, l’oggetto UIWebView non contiene un UIScrollView ma bensì un oggetto non documentato UIScroller. Tale oggetto, che funziona comunque da scroller, non risponde al selettore scrollEnabled bensì a scrollingEnabled, anch’esso non documentato! Per questo motivo le applicazioni vengono rifiutate.

    Per superare il problema si potrebbe usare il codice:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Remove Scroll
    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];
    }

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL