2015-09-23 3 views
7

Я разрабатываю приложение PhoneGap для iOS, и мне нужно избавиться от новой ярлыки iOS 9. Теперь я делаю следующее в - (void)viewDidLoad методыСкрыть ярлык клавиатуры для UIWebView в iOS 9

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

Это скрывает откат/повтор кнопка и копировать/вставить, но панель быстрой еще представлена ​​на клавиатуре и имеет навигационные кнопки на нем.

enter image description here

Как я могу избавиться от панели быстрого доступа полностью.

Благодарим за помощь!


***UPDATE 1***

Мой полный рабочий код ниже. Надеюсь, что это может помочь кому-то (спасибо @Clement ответ)

#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]; 
} 

Этот трюк будет скрывать отмены/повтора и кнопки навигации. Но текст с автопрогнозацией по-прежнему будет отображаться на клавиатуре. Чтобы скрыть панель быстрого доступа полностью добавить HTML атрибуты вашего элемента ввода

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

P.S Мое приложение находится на рассмотрении в настоящее время. Все еще не знаю, одобрит ли Apple это.


***UPDATE 2***

Мое приложение было одобрено Apple,

+0

Вы не можете, является частью веб-просмотра. Phonegap/Cordova просто использует HTML для создания своего ui, а затем он представлен в веб-представлении. – rckoenes

+0

Спасибо за ваш ответ, rckoenes. Но почему я все еще могу скрывать кнопки отмены/копирования/вставки? – rubanbs

+0

попробуйте не помещать поля ввода в форму – jcesarmobile

ответ

6

Использование метода swiziling мы можем удалить сочетание клавиш бар (работает только с 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 : Это свойство обычно используется для крепления с видом на принадлежность к системе поставляемыми клавиатуры , которая представлена ​​для UITextField и объектов UITextView.

Таким образом, новый блок реализации будет запущен каждый раз, когда клавиатура всплывает.

UPDATE

Чтобы удалить вид аксессуар из WKWebView использования WKContentView вместо UIWebBrowserView

+0

Это работает! Благодарю. Вы думаете, если Apple одобрит это? – rubanbs

+0

Да, это одобрено яблоком. –

+0

Мне любопытно, если кто-то был отвергнут за это? Плагин клавиатуры Telerik удалил эту функцию, потому что «он использовал так называемый« частный API », который Apple теперь отвергает, когда ваше приложение проверено». http://plugins.telerik.com/cordova/plugin/keyboard – mpoisot

Смежные вопросы