ios - how - uiscrollview xcode




UITextView schwebende blaue Box beim Scrollen (2)

Versuchen Sie, seinen autocorrectionType auf UITextAutocorrectionTypeNo .

Ich habe eine UITextView mit Scrolling deaktiviert. Es befindet sich in einem UIScrollView. Wenn ich "fffs" eintippe, erscheint ein * kleines blaues Kästchen. Wenn ich scrolle, während diese Box angezeigt wird, verschwindet die Box nicht, sie schwebt nur ** über dem Display und sieht wie ein offensichtlicher Fehler aus.

Wenn ich UITextView mit aktivierter Bildlauffunktion verwende, wird die Box ausgeblendet, sobald UITextView mit dem Bildlauf beginnt. Ich nehme an, UITextView hooks die Scroll-Ereignisse der eigenen Bildlaufleisten, wenn es sie hat, und versteckt diese Box, wenn es scrollt. Dies passiert nicht, wenn es sich in einem anderen UIScrollView befindet, also muss ich das wahrscheinlich selbst tun, aber wie bekomme ich es, um diese Box zu verstecken (und vielleicht sonst noch alles, was normalerweise die automatische Korrektur anwendet) eine robuste und nicht-private API-Art?

Ich könnte einen Fehler bei Apple einreichen, aber in der Zwischenzeit hoffe ich, dass jemand eine schnelle Lösung hat.

* kleine blaue Box = das Auto-Korrekte Box / Highlight-Ding - nicht sicher, was genau es zu nennen, vielleicht, warum ich keine vorhandenen Antworten finden konnte.

** floats = Think-Anzeige: in CSS behoben

Aktualisieren:

Ich habe das und einige andere Variationen davon, in scrollViewWillBeginDragging versucht:

UITextView *tv = GetFirstResponder(); // confirmed this returns correct value
tv.autocorrectionType = UITextAutocorrectionTypeNo;
[tv setNeedsDisplay];
[tv setNeedsLayout];
[tv setNeedsUpdateConstraints]; // just for giggles?

Ich habe bestätigt, dass der Code ausgeführt wird, und ich habe noch nicht einmal Code hinzugefügt, um die Autokorrektur erneut zu aktivieren, sodass ich weiß, dass sie nicht wieder aktiviert wird. Ich kann auch bestätigen, dass es etwas "funktioniert", denn wenn ich auf ein anderes Feld und dann wieder auf das ursprüngliche Feld klicke, wird die automatische Korrektur deaktiviert.

Ich denke, wenn ich die UIView für diese kleine blaue Box finden könnte, könnte ich sie verstecken / entfernen. Ich habe versucht, das neue View-Debugging in XCode zu verwenden, aber es erfasst nicht die blaue Box, also muss es speziell sein.

Mit all den Leuten, die UITextView auf ähnliche Weise benutzen wie ich bin (Größe ändern während des Tippens, kein internes Scrolling), bin ich überrascht, dass das noch niemand herausgefunden hat. Sofern es sich nicht um einen brandneuen Fehler handelt, verwende ich die neueste iOS-Version und meine beiden Testgeräte (iPod 5 und iPad).


Dies scheint bisher zu funktionieren, aber ich habe noch nicht viele Tests durchgeführt:

-(void) walkViews:(UIView*)v
{
    NSString *className = NSStringFromClass([v class]);
    if([className isEqualToString:@"UIAutocorrectInlinePrompt"])
        v.hidden = YES;
    NSArray *subviews = v.subviews;
    for(UIView *sv in subviews)
        [self walkViews:sv];
}

-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSArray *windows = [UIApplication sharedApplication].windows;
    for (UIWindow *w in windows)
    {
        [self walkViews:w];
    }
}

Sie möchten wahrscheinlich einen besseren Namen für "walkViews", aber im Grunde, wenn UIScrollView scrollt, finde ich die Ansicht für die "kleine blaue Box" und verstecke sie. Bis jetzt, meine begrenzten Tests, kommt die Box zurück, wenn ich wieder tippe und es benötigt wird. Es scheint auch keine anderen Auto-Correct-Funktionen zu vermasseln. Immer noch ein Hack und Gegenstand all der Probleme, die mit dieser Art von Sache einhergehen, aber bis Apple diesen Fehler beheben kann, werde ich wahrscheinlich diesen Workaround nutzen.





uitextview