2015-08-06 13 views
11

Ich entwickle PhoneGap-Anwendung für iOS und ich muss Auto Prediction Text auf der Tastatur deaktivieren.iOS deaktivieren QuickType Keyboard programmgesteuert auf UIWebBrowserView

ich viele Lösungen für UITextView wie diese gefunden:

Disable iOS8 Quicktype Keyboard programmatically on UITextView

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

... aber PhoneGap App UIWebBrowserView nach innen hat.

Auch ich weiß über HTML-Attribute zum Deaktivieren der automatischen Vorhersage. Sie funktionieren gut nur für normale HTML-Eingaben, aber ich habe contenteditable Element auf meinem UIWebBrowserView, die ein editierbarer Bereich des Texteditors ist (CKEditor in meinem Fall).

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

Gibt es eine Möglichkeit, die automatische Vorausberechnung für programmierbare Elemente programmgesteuert auf iOS zu deaktivieren?

Vielen Dank für jede Hilfe!

+0

Haben Sie eine Lösung gefunden? –

+1

nicht möglich bei zufrieden stellenden Elementen – jcesarmobile

+1

@Robin Noch keine Lösung gefunden. Da diese Funktionalität jedoch für die App von entscheidender Bedeutung ist, verwenden wir eine komplizierte Problemumgehung - erstellen Sie einen nativen Texteditor (RichTextEditor für iOS) und zeichnen Sie ihn über das WebView. Wenn ein Teil der App über dem nativen Editor liegen sollte (z. B. modale Dialoge), ersetzen wir den nativen Editor durch ein div-Element, das mit nativem Editor-Inhalt gefüllt ist. – rubanbs

Antwort

3

Ich habe dieses Problem kürzlich in einer nativen App (nicht PhoneGap), die ein UIWebView hostet, gefunden und konnte es nicht lösen, indem ich das HTML änderte. Ich schlage vor, einen Fehler bei Apple einzureichen.

konnte ich die Tastatur zwingen, sans mit einem ziemlich komplizierten Schema QuickType- zu zeigen, dass ich sicher bin, würde App Store-Richtlinien übergeben:

1) für

UIKeyboardWillShowNotification Benachrichtigungen beobachtet

2) Wenn die Tastatur erscheint, die Ersthelfer finden - dies wird einige Blick in den UIWebView

3) dynamisch diese Ansicht Unterklasse eine alternative Implementierung des textInputTraits Verfahren zu schaffen (die eine UITextInputTraits konformen Objekt zurückgibt). Setzen Sie die autocorrectionType für dieses zurückgegebene Objekt auf UITextAutocorrectionTypeNo.

4) Rufen Sie reloadInputViews auf der First-Responder-Ansicht - zweimal.

Ich weiß, dass all dies wahrscheinlich nicht hilft Ihnen oder Ihr spezifisches Problem zu lösen, aber vielleicht wird es jemandem helfen.

0

Methode Swizzling kann helfen.

1.Erstellen 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 Anwendung.

PS: Ich habe versucht,

[[UITextView appearance] setAutocorrectionType:UITextAutocorrectionTypeNo]; 

Standardeinstellung zu ändern, aber abgestürzt in Xcode7, ios9.

1

Der einzige Weg, fand ich - ist privaten API zu verwenden:

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

Es ist für mich bei iOS7 und iOS8 arbeitet.

Mit diesem Trick können Sie jedoch Apples Bewertung nicht bestehen.

Verwandte Themen