172 votes

Retard / retard super lent sur l'animation initiale du clavier de UITextField

Bon, ce problème a été me rend fou.

Il faut environ 3-4 secondes pour le clavier de pop-up après que j'ai toucher mon UITextField. Cela se produit uniquement sur la première fois le clavier apparaît depuis l'application lancée, après l'animation démarre instantanément.

Au début, je pensais que c'était le problème de chargement trop d'images, ou mon UITableView, mais j'ai créé un nouveau projet avec seulement un UITextField, et j'ai encore l'expérience de ce problème. Je suis à l'aide d'ios5, xcode version 4.2, et en cours d'exécution sur un iphone 4s.

C'est mon 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

Est-ce un problème commun à toutes les applications?

Maintenant, la seule façon que je peux le faire un peu mieux, c'est d'avoir le textField devenir/démissionner premier intervenant dans viewDidAppear, mais qui ne résout pas entièrement le problème, il a juste des charges du retard sur lors de l'affichage des charges de la place. Si je clique sur la zone de texte immédiatement lors de l'affichage des charges, je reçois toujours le problème; si j'attends 3-4 secondes après le point de vue des charges avant de toucher la zone de texte, je n'ai pas le retard.

149voto

Vadoff Points 1506

Le problème n'est donc PAS limité à la première installation, comme je le pensais précédemment, mais se produit chaque fois que l'application est lancée. Voici ma solution qui résout complètement le problème.

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

27voto

ABCD Points 1686

Oui, j'ai aussi quelques secondes de retard sur le dernier iPhone 4s. Ne paniquez pas. Pour certaines raisons, cela ne se produit que la première fois que l'application est chargée depuis Xcode dans Debug. Quand j'ai libéré, je n'ai pas le retard. Oublie ça ...

20voto

5voto

Spetruk Points 41

Code dans le bloc ajouté à la file d'attente principale et exécuté de manière asynchrone. (ne pas verrouiller le fil principal)

 dispatch_async(dispatch_get_main_queue(), ^(void){
      [_textField becomeFirstResponder];
 });
 

4voto

zekel Points 2300

Voir cette réponse . Ils suggèrent UIResponder + KeyboardCache . C'est simple et génial. Testé sur iOS 7.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X