39 votes

iOS - Comment puis-je précharger le clavier?

Le Problème

Dans la plupart des applications de l'iPhone, il y a un peu de retard, la première fois que le clavier est présenté (sans doute la création du clavier prend un peu de peps, même sur un iPhone 4).

La plupart des gens semblent ok avec ça. Je ne suis pas, il a vraiment des bugs moi et mon application est présentée, les utilisateurs seront très confus qu'il ne se passe rien pendant quelques secondes quand ils tapent sur un champ de texte pour la première fois.


Ce que j'ai Essayé

Googler il apporte une solution, malheureusement ce n'est pas valide comme de l'iOS 4 (voir ici).

Je n'attends pas la solution pour être facile à trouver, si je pouvais mettre un bounty sur cela tout de suite, je le ferais. Je serais très content si quelqu'un a trouvé une solution. La solution doit faire est de charger le clavier sans que l'utilisateur en soit conscient.


Donc..

Toutes les idées sont les bienvenues. Complet, code de travail (pour iOS 4 et 5) est bounty digne (même si la prime a venir plus tard!).

Si une solution est trouvée j'ai l'intention de créer une 'KeyboardPreloader" classe que les gens peuvent tomber dans leur projet, et de la précharge du clavier avec une seule ligne de code :)

30voto

cbowns Points 1960

UIResponder+KeyboardCache a été écrit à l'adresse exacte de ce problème.

À partir de ce projet readme:

Cette catégorie sur UIResponder vous donne une méthode simple +cacheKeyboard , de sorte que vous pouvez contrôler la mise en cache des travaux. Par exemple, si vous chargez des données à partir d'un serveur, puis vous pourrait appeler ce cours que les temps d'arrêt. Il existe une autre méthode +cacheKeyboard: qui prend une option BOOL de la valeur. En passant OUI à cette méthode provoque le cache invocation pour arriver sur la prochaine runloop. Donc, si vous avez effectué une animation juste avant l'appel de cette méthode, il ne serait pas interrompre cette animation.

12voto

Ankit Srivastava Points 6979

faire le textfield la firstResponder et puis démissionnaire dans le viewdidload.. cela semble fonctionner sans retard lorsque le clavier est de nouveau chargé...

- (void)viewDidLoad
{
    [super viewDidLoad];

    [textField becomeFirstResponder];
    [textField resignFirstResponder];
        // Do any additional setup after loading the view, typically from a nib.
}

7voto

Vadoff Points 1506

Voici ce que je fais:

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

Super lent gal/retard sur le clavier d'origine de l'animation de l'objet UITextField

0voto

ohho Points 17243

Une fois qu'un utilisateur se plaindre de mon appli de la lenteur du chargement du clavier. Voici une petite astuce pour désactiver le clavier de l'animation:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // ...

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(willShowKeyboard:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didShowKeyboard:)
                                                 name:UIKeyboardDidShowNotification
                                               object:nil];

    // ...
}


- (void)willShowKeyboard:(NSNotification *)notification
{
    [UIView setAnimationsEnabled:NO];
}

- (void)didShowKeyboard:(NSNotification *)notification
{
    [UIView setAnimationsEnabled:YES];
}

Il ne peut pas répondre directement à la question, comme le clavier lui-même est dans l'INTERFACE principale pour mon exemple, et la mise en cache n'est pas une option pour moi. Néanmoins, la réactivité globale est améliorée.

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