W porządku, ten problem doprowadza mnie do szału.
Klawiatura wyskakuje po około 3-4 sekundach od dotknięcia UITextField
. Dzieje się tak tylko przy pierwszym wyskakiwaniu klawiatury od uruchomienia aplikacji, po czym animacja rozpoczyna się natychmiast.
Na początku myślałem, że to problem z wczytaniem zbyt wielu zdjęć lub moich UITableView
, ale właśnie stworzyłem zupełnie nowy projekt z tylko jednym UITextField
i nadal mam ten problem. Używam iOS 5, Xcode w wersji 4.2 i działam na iPhonie 4S.
To jest mój kod:
#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
Czy jest to wspólny problem dla wszystkich aplikacji?
W tej chwili jedynym sposobem, w jaki mogę to nieco poprawić, jest textField
zostanie / zrezygnowanie z pierwszej pomocy viewDidAppear
, ale to nie rozwiązuje problemu całkowicie - po prostu ładuje opóźnienie, gdy zamiast tego ładuje się widok. Jeśli kliknę textField
natychmiast po załadowaniu widoku, problem nadal występuje; jeśli poczekam 3-4 sekundy po załadowaniu widoku przed dotknięciem pola textField, nie otrzymam opóźnienia.
Tak więc problem NIE ogranicza się tylko do pierwszej instalacji, jak wcześniej myślałem, ale występuje za każdym razem, gdy aplikacja jest uruchamiana. Oto moje rozwiązanie, które całkowicie rozwiązuje problem.
źródło
Tak, mam też kilka sekund opóźnienia na najnowszych iPhone'ach 4s. Nie panikuj. Z pewnych powodów dzieje się tak tylko przy pierwszym ładowaniu aplikacji z Xcode w debugowaniu. Kiedy wydałem Release, nie dostaję opóźnienia. Po prostu zapomnij...
źródło
Fastest, Smallest [-Os]
. Możesz to zmienić naBuild Settings > Optimization Level
To jest znany problem.
Wstępne ładowanie klawiatury wydaje się obiecujące. Sprawdź wstępne ładowanie klawiatury UIK.
Dodatkowe materiały do czytania:
Początkowe wyświetlanie wirtualnej klawiatury iPhone'a jest powolne w przypadku UITextField. Czy ten hack jest wymagany?
Klawiatura UITextField blokuje runloop podczas ładowania?
http://www.iphonedevsdk.com/forum/iphone-sdk-development/12114-uitextfield-loooong-delay-when-first-tapped.html
źródło
Możesz użyć rozwiązania Vadoffa w Swift, dodając to do didFinishLaunchingWithOptions:
U mnie działa w iOS 8.
źródło
Kod w bloku dodany do głównej kolejki i uruchamiany asynchronicznie. (nie blokuj głównego wątku)
źródło
Zobacz tę odpowiedź . Sugerują UIResponder + KeyboardCache . To proste i niesamowite. Przetestowano na iOS 7.
źródło
Powiązany problem, w którym UIViewController byłby wolny do prezentowania, został rozwiązany przy użyciu czcionki systemowej zamiast niestandardowej czcionki w UITextField. Być może użycie czcionki systemowej może również rozwiązać ten problem?
źródło
Ten błąd wydaje się być naprawiony w iOS 9.2.1. Od czasu aktualizacji urządzenia nie mam już opóźnienia między dotknięciem pola tekstowego a wyświetlaniem klawiatury, gdy moje urządzenie jest podłączone do komputera.
źródło
Ta wybrana odpowiedź powoduje awarię BAD_EXC na iOS 11 - usuń z aplikacji, aby naprawić
źródło
Możesz dodać poniższy kod, gdy widok ViewControllera został załadowany, na przykład viewDidAppear.Nie tylko application: didFinishLaunchingWithOptions:
źródło