2012-10-30 10 views
6

Sto cercando un modo per osservare per le notifiche in una UIWebView che la selezione del testo è iniziata o terminata. Una volta visualizzati i perni e la sovrapposizione di selezione blu, aggiorna automaticamente gli oggetti Selezione e intervallo di Javascript, ma quando tocchi la selezione e finisce, non sembra esserci un modo pulito per ricevere una notifica.Notifiche in UIWebView che la selezione del testo è iniziata o terminata?

risposta

1

Si potrebbe semplicemente agganciare all'evento javascript touchend (o touchesEnded in Obj-C) e controllare lo stato dello window.getSelection(). C'è anche l'evento javascript selectionchange.

Un altro metodo che uso è quello di verificare lo stato della selezione del UIWebView via scorrendo subviews:

- (bool) selectionInWebView:(UIWebView*)webView { 
    UIScrollView *scrollView = webView.scrollView; //assumes IO(6)? and scrollView is exposed. Loop subviews otherwise. 
    UIView *browserView; 

    for(int i = 0; scrollView.subviews.count; i++){ 
     if([NSStringFromClass([scrollView.subviews[i] class]) isEqualToString:@"UIWebBrowserView"]){ 
      browserView = scrollView.subviews[i]; break; 
     } 
    } 

    if(browserView == nil) return false; 

    for(int i = 0; browserView.subviews.count; i++){ 
     if([NSStringFromClass([browserView.subviews[i] class]) isEqualToString:@"UIWebSelectionView"]){ 
      //UIView *selectionView = browserView.subviews[i]; 
      return true; //selection view exists, a selection is in progress 
     } 
    } 

    return false; 
} 

Ma la soluzione migliore è il controllo dello stato della selezione quando il touch eventi finali del fuoco o il cambiamento di selezione degli eventi incendi.

+1

Grazie per avermi dato uno scatto. – HalR