2015-08-06 21 views
11

Tôi đang phát triển ứng dụng PhoneGap cho iOS và tôi cần tắt văn bản tiên đoán tự động trên Bàn phím.iOS tắt Bàn phím Quicktype theo lập trình trên UIWebBrowserView

tôi thấy rất nhiều giải pháp cho UITextView như thế này:

Disable iOS8 Quicktype Keyboard programmatically on UITextView

ios8 xcode how to remove QuickType on UIKeyboard (auto complete/auto suggest)

... nhưng PhoneGap ứng dụng có UIWebBrowserView bên trong.

Ngoài ra tôi biết về các thuộc tính html để tắt dự đoán tự động. Chúng hoạt động tốt chỉ cho các đầu vào html thông thường, nhưng tôi có phần tử contenteditable trên UIWebBrowserView của mình, đây là vùng chỉnh sửa của trình soạn thảo văn bản (CKEditor trong trường hợp của tôi).

<!-- Does not work --> 
<div contenteditable="true" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"> 
</div> 

Vì vậy, có cách nào để tắt chức năng tự động xác thực cho các yếu tố có thể chỉnh sửa được lập trình trên iOS không?

Rất cảm kích mọi trợ giúp!

+0

Bạn có tìm thấy giải pháp nào cho điều này không? –

+1

không thể trên các yếu tố có thể chỉnh sửa – jcesarmobile

+1

@Robin Chưa tìm thấy giải pháp nào. Nhưng vì chức năng này cực kỳ quan trọng đối với ứng dụng, chúng tôi sử dụng cách giải quyết phức tạp - tạo trình soạn thảo văn bản gốc (RichTextEditor for iOS) và vẽ nó lên trên WebView. Khi một phần nào đó của ứng dụng phải ở trên trình chỉnh sửa gốc (ví dụ: các hộp thoại phương thức), chúng tôi thay thế trình chỉnh sửa gốc bằng phần tử 'div' chứa nội dung trình soạn thảo gốc. – rubanbs

Trả lời

3

Gần đây tôi đã gặp sự cố này trong ứng dụng gốc (không phải PhoneGap) lưu trữ UIWebView và không thể giải quyết vấn đề bằng cách thay đổi HTML. Tôi đề nghị nộp một lỗi với Apple.

tôi đã có thể để buộc các bàn phím để hiển thị sans QuickType với một chương trình khá phức tạp mà tôi chắc chắn rằng sẽ không vượt qua chủ trương App Store:

1) Quan sát các UIKeyboardWillShowNotification thông báo

2) Khi bàn phím đang xuất hiện, tìm trả lời đầu tiên - đây sẽ là một số chế độ xem bên trong UIWebView

3) Tự động phân lớp chế độ xem này để cung cấp phương pháp textInputTraits thay thế (trả về đối tượng phù hợp UITextInputTraits). Đặt autocorrectionType trên đối tượng được trả về này là UITextAutocorrectionTypeNo.

4) Gọi reloadInputViews trên giao diện trả lời đầu tiên - hai lần.

Tôi nhận thấy tất cả điều này không có khả năng giúp bạn hoặc giải quyết vấn đề cụ thể của bạn nhưng có lẽ nó sẽ giúp một ai đó.

0

Phương pháp Súc miệng có thể hữu ích.

1.Create catogory: UITextView + CloseQuickType.h & UITextView + CloseQuickType.m

2.Download jrswizzle at github

3.UITextView + CloseQuickType.m:

#import "UITextView+CloseQuickType.h" 
#import <objc/runtime.h> 
#import "JRSwizzle.h" 
@implementation UITextView (CloseQuickType) 
+ (void)load { 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     //exchange init methods 
     [self jr_swizzleMethod:@selector(init) withMethod:@selector(init_) error:nil]; 
     [self jr_swizzleMethod:@selector(initWithFrame:) withMethod:@selector(initWithFrame_:) error:nil]; 
     [self jr_swizzleMethod:@selector(initWithCoder:) withMethod:@selector(initWithCoder_:) error:nil]; 
    }); 
} 
#pragma mark - myInitMethods 
- (instancetype)init_ { 
    self = [self init_]; 
    if (self) { 
     self.autocorrectionType = UITextAutocorrectionTypeNo; 
    } 
    return self; 
} 
- (instancetype)initWithFrame_:(CGRect)frame { 
    self = [self initWithFrame_:frame]; 
    if (self) { 
     self.autocorrectionType = UITextAutocorrectionTypeNo; 
    } 
    return self; 
} 
- (instancetype)initWithCoder_:(NSCoder *)aDecoder { 
    self = [self initWithCoder_:aDecoder]; 
    if (self) { 
     self.autocorrectionType = UITextAutocorrectionTypeNo; 
    } 
    return self; 
} 
@end 

4.Run ứng dụng.

PS: tôi đã cố gắng

[[UITextView appearance] setAutocorrectionType:UITextAutocorrectionTypeNo]; 

để thay đổi cài đặt mặc định nhưng bị rơi trong Xcode7, ios9.

1

Cách duy nhất tôi tìm thấy - là sử dụng API tin:

UIWebBrowserView *browserView = _myBrowserView; 

NSString *spellChecking [email protected]"setContinuousSpellCheckingEnabled:"; 
SEL enableSpellCheckingSelector = NSSelectorFromString(spellChecking); 

NSMethodSignature* signature = [[browserView class] instanceMethodSignatureForSelector:enableSpellCheckingSelector]; 
if (!signature) 
    return; 
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:signature]; 
[invocation setTarget:browserView]; 
[invocation setSelector:enableSpellCheckingSelector]; 
[invocation setArgument:&enabled atIndex:2]; 
[invocation invoke]; 

Nó làm việc cho tôi ở iOS7 và iOS8.

Tuy nhiên, với mẹo đó bạn không thể vượt qua đánh giá của Apple.

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