2015-09-23 3 views
7

Sto sviluppando un'applicazione PhoneGap per iOS e ho bisogno di sbarazzarmi della nuova barra di collegamento iOS 9. Ora sto facendo quanto segue nella - (void)viewDidLoad metodoNascondi barra della tastiera scorciatoia per UIWebView in iOS 9

if ([self.webView respondsToSelector:@selector(inputAssistantItem)]) { 
    UITextInputAssistantItem *inputAssistantItem = [self.webView inputAssistantItem]; 
    inputAssistantItem.leadingBarButtonGroups = @[]; 
    inputAssistantItem.trailingBarButtonGroups = @[]; 
} 

Questo nasconde Annulla/Ripristina e copia/incolla tasti ma barra di collegamento ancora presentato sulla tastiera e ha pulsanti di navigazione su di esso.

enter image description here

Come posso liberarmi della barra di collegamento completamente.

Grazie per il vostro aiuto!


***UPDATE 1***

Il mio codice di lavoro completo è qui sotto. Spero che questo possa aiutare qualcuno (grazie a @Clement risposta)

#import <objc/runtime.h> 

- (void) hideKeyboardShortcutBar: (UIView *)view 
{ 
    for (UIView *sub in view.subviews) { 
     [self hideKeyboardShortcutBar:sub]; 
     if ([NSStringFromClass([sub class]) isEqualToString:@"UIWebBrowserView"]) { 

      Method method = class_getInstanceMethod(sub.class, @selector(inputAccessoryView)); 
      IMP newImp = imp_implementationWithBlock(^(id _s) { 
       if ([sub respondsToSelector:@selector(inputAssistantItem)]) { 
        UITextInputAssistantItem *inputAssistantItem = [sub inputAssistantItem]; 
        inputAssistantItem.leadingBarButtonGroups = @[]; 
        inputAssistantItem.trailingBarButtonGroups = @[]; 
       } 
       return nil; 
      }); 
      method_setImplementation(method, newImp); 

     } 
    } 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self hideKeyboardShortcutBar:self.webView]; 
} 

Questo trucco nasconderà undo/redo e pulsanti di navigazione. Ma il testo di auto-previsione sarà ancora mostrato sulla tastiera. Per nascondere barra di collegamento aggiungere completamente attributi HTML al vostro elemento di input

<input autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /> 

P.S La mia app è sulla revisione ora. Ancora non so se Apple approverà questo.


***UPDATE 2***

La mia app è stata approvata da Apple

+0

Non è possibile, è parte della vista web. PhoneGap/Cordova usa solo l'HTML per costruire il tuo tu ui e poi viene presentato in una visualizzazione web. – rckoenes

+0

Grazie per la risposta, rckoenes. Ma perché riesco ancora a nascondere i pulsanti di annullamento/copia/incolla? – rubanbs

+0

prova a non inserire i campi di input all'interno di un modulo – jcesarmobile

risposta

6

Usando il metodo swiziling possiamo rimuovere la barra di scelta rapida da tastiera (funziona solo con objC).

- (void)hideKeyboardShortcutBar 
    { 
     Class webBrowserClass = NSClassFromString(@"UIWebBrowserView"); 
     Method method = class_getInstanceMethod(webBrowserClass, @selector(inputAccessoryView)); 

     IMP newImp = imp_implementationWithBlock(^(id _s) { 
      if ([self.webView respondsToSelector:@selector(inputAssistantItem)]) { 
       UITextInputAssistantItem *inputAssistantItem = [self.webView inputAssistantItem]; 
       inputAssistantItem.leadingBarButtonGroups = @[]; 
       inputAssistantItem.trailingBarButtonGroups = @[]; 
      } 
      return nil; 
     }); 

     method_setImplementation(method, newImp); 
    } 

inputAccessoryView : Questa struttura è tipicamente utilizzato per collegare una vista accessorio alla tastiera fornito dal sistema che viene presentato per UITextField e oggetti UITextView.

Quindi il nuovo blocco di implementazione verrà attivato ogni volta che viene visualizzata la tastiera.

UPDATE

Per rimuovere la vista accessorio da WKWebView uso WKContentView invece di UIWebBrowserView

+0

Funziona! Grazie. Pensi che Apple approverà questo? – rubanbs

+0

Sì, è approvato da Apple. –

+0

Sono curioso di sapere se qualcuno è stato respinto per questo? Il plug-in per tastiera Telerik ha rimosso questa funzionalità perché "utilizzava una cosiddetta" API privata "che Apple sta ora rifiutando quando viene esaminata la tua app". http://plugins.telerik.com/cordova/plugin/keyboard – mpoisot