2015-09-23 21 views
7

Tôi đang phát triển ứng dụng PhoneGap cho iOS và tôi cần loại bỏ thanh phím tắt iOS 9 mới. Bây giờ tôi đang làm như sau trong - (void)viewDidLoad phương phápẨn thanh phím tắt cho UIWebView trong iOS 9

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

này ẩn undo/redo và copy/paste nút nhưng thanh shortcut vẫn trình bày trên bàn phím và có nút điều hướng trên đó.

enter image description here

Làm cách nào để loại bỏ hoàn toàn thanh phím tắt.

Cảm ơn sự giúp đỡ của bạn!


***UPDATE 1***

mã làm việc đầy đủ của tôi là dưới đây. Hy vọng điều này có thể giúp ai đó (nhờ trả lời @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]; 
} 

Thủ thuật này sẽ ẩn các nút điều hướng/làm lại và điều hướng. Nhưng văn bản tự động dự đoán vẫn sẽ được hiển thị trên bàn phím. Để ẩn thanh phím tắt hoàn toàn thêm html thuộc tính đến yếu tố đầu vào của bạn

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

Tái bút: Ứng dụng của tôi là tự rà soát hiện nay. Vẫn không biết liệu Apple có chấp nhận điều này hay không.


***UPDATE 2***

Ứng dụng của tôi đã được chấp thuận bởi Apple

+0

Bạn không có thể, là một phần của view web. Phonegap/Cordova chỉ sử dụng HTML để xây dựng ui của bạn và sau đó nó được trình bày trong một giao diện web. – rckoenes

+0

Cảm ơn bạn đã trả lời, rckoenes. Nhưng tại sao tôi vẫn có thể ẩn các nút hoàn tác/sao chép/dán? – rubanbs

+0

cố gắng không đặt các trường nhập bên trong biểu mẫu – jcesarmobile

Trả lời

6

Sử dụng phương pháp swiziling chúng ta có thể loại bỏ các thanh phím tắt (chỉ làm việc với 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 : Thuộc tính này thường được sử dụng để đính kèm một cái nhìn phụ kiện cho bàn phím hệ thống cung cấp được trình bày cho UITextField và đối tượng UITextView.

Vì vậy, khối triển khai mới sẽ được kích hoạt mỗi khi bàn phím bật lên.

CẬP NHẬT

Để loại bỏ quan điểm phụ kiện từ WKWebView sử dụng WKContentView thay vì UIWebBrowserView

+0

Công trình này hoạt động! Cảm ơn. Bạn có nghĩ Apple sẽ phê chuẩn điều này không? – rubanbs

+0

Có nó được phê duyệt bởi táo. –

+0

Tôi tò mò liệu có ai bị từ chối vì điều này không? Plugin bàn phím Telerik đã xóa tính năng này vì "nó đã sử dụng cái gọi là 'API riêng' mà Apple hiện đang từ chối khi ứng dụng của bạn được xem xét". http://plugins.telerik.com/cordova/plugin/keyboard – mpoisot

Các vấn đề liên quan