Okay, dieses Problem hat mich verrückt gemacht.
Es dauert ungefähr 3-4 Sekunden, bis die Tastatur nach dem Berühren meiner UITextField
angezeigt wird. Dies tritt nur beim ersten Öffnen der Tastatur auf, seit die App gestartet wurde. Danach beginnt die Animation sofort.
Zuerst dachte ich, es sei ein Problem, zu viele Bilder oder meine UITableView
zu laden, aber ich habe gerade ein brandneues Projekt mit nur einer UITextField
erstellt, und ich habe immer noch dieses Problem. Ich verwende iOS 5, Xcode Ver 4.2 und laufe auf einem iPhone 4S.
Das ist mein Code:
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 30)];
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.delegate = self;
[self.view addSubview:textField];
}
@end
Ist dies ein häufiges Problem für alle Apps?
Im Moment kann ich es nur etwas besser machen, indem ich textField
in viewDidAppear
als Erstantworten/resign werde, aber das löst das Problem nicht vollständig - es lädt nur die Verzögerung, wenn stattdessen die Ansicht geladen wird. Wenn ich sofort beim Laden der Ansicht auf textField
klicke, bekomme ich immer noch das Problem. Wenn ich nach dem Laden der Ansicht 3-4 Sekunden warte, bevor Sie das textField berühren, wird die Verzögerung nicht angezeigt.
Das Problem ist also NICHT auf die erste Installation beschränkt, wie ich es mir vorher gedacht hatte, sondern tritt bei jedem Start der App auf. Hier ist meine Lösung, die das Problem vollständig löst.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Preloads keyboard so there's no lag on initial keyboard appearance.
UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
}
Bevor Sie exotische Hacks implementieren, um dieses Problem zu umgehen, versuchen Sie Folgendes: Stoppen Sie die Debug-Sitzung, schließen Sie die App vom Multitasking, trennen Sie das Gerät vom Computer und führen Sie die App normal aus, indem Sie auf das entsprechende Symbol tippen. Ich habe mindestens zwei Fälle gesehen, in denen die Verzögerung nur auftritt, wenn das Gerät angeschlossen ist.
Ja, ich habe auch ein paar Sekunden Verspätung beim neuesten iPhone 4s. Keine Panik Aus bestimmten Gründen geschieht dies nur beim ersten Laden der App aus Xcode in Debug. Wenn ich Release habe, bekomme ich keine Verzögerung. Vergiss es einfach...
Dies ist ein bekanntes Problem.
Das Laden der Tastatur erscheint vielversprechend. Check Vorladen des UIKeyboards.
Einige zusätzliche Lektüre:
Sie können die Lösung von Vadoff in Swift verwenden, indem Sie didFinishLaunchingWithOptions folgendermaßen hinzufügen:
// Preloads keyboard so there's no lag on initial keyboard appearance.
let lagFreeField: UITextField = UITextField()
self.window?.addSubview(lagFreeField)
lagFreeField.becomeFirstResponder()
lagFreeField.resignFirstResponder()
lagFreeField.removeFromSuperview()
Es funktioniert für mich in iOS 8.
Code in Block zur Hauptwarteschlange hinzugefügt und asynchron ausgeführt. (Hauptthread nicht gesperrt)
dispatch_async(dispatch_get_main_queue(), ^(void){
[textField becomeFirstResponder];
});
Siehe diese Antwort . Sie schlagen vor, UIResponder + KeyboardCache . Es ist einfach und großartig. Getestet auf iOS 7.
Ein verwandtes Problem, bei dem ein UIViewController nur langsam präsentiert werden konnte, wurde durch Verwendung der Systemschriftart anstelle einer benutzerdefinierten Schriftart für UITextField behoben. Vielleicht funktioniert die Systemschrift auch für dieses Problem?
Diese ausgewählte Antwort führt zum Absturz von BAD_EXC unter iOS 11 - Von App zu Fix entfernen
Dieser Fehler scheint in iOS 9.2.1 behoben zu sein. Seit dem Upgrade meines Geräts gibt es keine Verzögerung mehr zwischen dem Tippen auf ein Textfeld und der Tastatur, wenn das Gerät an meinen Computer angeschlossen ist.