iPhone UIWebview: Comment forcer un clavier numérique? C’est possible?

J’expérimente PhoneGap pour développer des applications iPhone. PhoneGap enveloppe fondamentalement une UIWebView – cela fonctionne bien. Le problème est que mon application dispose de plusieurs champs de saisie qui ne prennent que des entrées numériques. Je dois vraiment forcer le pavé numérique au lieu d’accepter le clavier standard par défaut, ce qui oblige ensuite l’utilisateur à basculer vers le numérique sur chaque champ. Est-ce que quelqu’un sait si c’est possible? Comment?

Clarification: je sais qu’Apple ne fournit actuellement aucune API pour permettre cela. Je me demande si créer une classe personnalisée ayant hérité de UIWebView pourrait aider, ou peut-être créer un clavier personnalisé ouvrirait-il certaines possibilités?

Mise à jour 6 novembre 2009 – Comme indiqué ci-dessous, Apple a récemment mis à jour les fonctionnalités de safari afin de les prendre en charge. La réponse acceptée a donc été modifiée pour refléter cela.

      

Il semble que Mobile Safari prend en charge les nouveaux atsortingbuts de type d’entrée HTML5 tels que les adresses email , le numéro , la recherche , le tel et l’ url . Celles-ci changeront le clavier affiché. Voir l’atsortingbut type .

Donc, par exemple, vous pourriez faire ceci:

  

Et lorsque la zone de saisie a le focus, le clavier numérique est affiché (comme si l’utilisateur avait le clavier complet et appuyait sur le bouton “123”).

Si vous ne voulez vraiment que des chiffres, vous pouvez spécifier:

  

Et puis, l’utilisateur obtiendrait le clavier de numérotation du numéro de téléphone.

Je sais que cela fonctionne avec Mobile Safari – Je suppose seulement que cela fonctionnera avec UIWebView.

J’ai trouvé une meilleure solution: utiliser lors de la conception de formulaires pour les navigateurs mobiles et de bureau.

De la documentation d’Apple (la note sur UIWebView):

Vous ne pouvez pas spécifier le type de clavier dans les éléments d’entrée. La vue Web affiche un clavier personnalisé basé sur le clavier par défaut, mais comprend des commandes supplémentaires pour naviguer entre les éléments de formulaire.

Vérifié sur IPhone OS 3.0, cette fonctionnalité n’était toujours pas là, ne sachant pas pourquoi Apple venait de supprimer cette fonctionnalité pratique, vraiment fâché de travailler là-dessus dès maintenant 🙁

Voici une liste de tous les types compatibles avec iOS (4.0 et versions ultérieures):

http://conecode.com/news/2011/12/mobile-safari-uiwebview-input-types/

Cela a été possible lors de la première itération de l’iPhone OS – Safari donnerait des claviers numériques pour former des champs avec «zip» ou «phone» dans leurs noms – mais il a disparu dans iPhone OS 2.0.

PhoneGap ne dispose pas d’une fonction API pour le remplacer pour le moment. C’est peut-être quelque chose sur lequel ils travaillent, ce serait certainement une fonctionnalité astucieuse.

iOS Mobile Safari prend également en charge:

  

Vous devez modifier la partie HTML de votre projet Dashcode:

  1. Dans Dashcode, ouvrez index.html dans la fenêtre de code.
  2. Sur le canevas de la vue sur laquelle vous travaillez, sélectionnez le champ de saisie que vous souhaitez définir pour utiliser le clavier optimisé.
  3. Cliquez sur index.html pour lui donner le focus.
  4. Sélectionnez edit> find dans la barre de menu Dashcode.
  5. Tapez dans la zone de recherche le nom exact que vous avez donné au contrôle de champ de texte. Find localisera le contrôle dans le fichier index.html.
  6. Changez le type de type="text" en type="number" .

Terminé.

Ce que vous pouvez également utiliser pour l’application basée sur iOS phonegap est la suivante:

 input type="number" pattern="[0-9]*" 

Il est montré dans l’image ci-dessous. Fonctionne à merveille avec iOS 8.2 et phonegap 3.5 et supérieur.

iOs a un clavier numérique UIKeyboardTypeNumbersAndPunctuation , mais cela ne peut pas être appelé à partir du HTML ( https://developer.apple.com/library/ios/documentation/SsortingngsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html )

puisque sur le clavier “tel” la ponctuation est manquante, vous devez la créer vous-même. Depuis les claviers ios8 personnalisés sont disponibles. Ou si vous avez juste besoin de la ponctuation, vous pouvez append un bouton ( Comment append un bouton “Terminé” au clavier numérique dans iOS ) au clavier numérique qui apparaît lorsque vous spécifiez votre champ de saisie avec type="number" pattern="[0-9]*" .

Pour ce faire: le code objective-c.

 -(void)keyboardWillHide:(NSNotification *)note { [self.donekeyBoardBtn removeFromSuperview]; [self.webView ssortingngByEvaluatingJavaScriptFromSsortingng:[NSSsortingng ssortingngWithFormat: @"document.activeElement.blur()"]]; } - (void)keyboardWillShow:(NSNotification *)note { [UIView setAnimationsEnabled:NO]; // create custom button //UIKeyboardTypeNumberPadin //type="number" pattern="[0-9]*" UIButton *extryB= [UIButton buttonWithType:UIButtonTypeRoundedRect]; extryB.frame = CGRectMake(0, self.view.frame.size.height+150, 100, 50); extryB.backgroundColor = [UIColor colorWithRed:204.0f/255.0f green:210.0f/255.0f blue:217.0f/255.0f alpha:1.0f]; extryB.adjustsImageWhenHighlighted = NO; extryB.titleLabel.font = [UIFont systemFontOfSize:14.0]; [extryB setTitle:@"," forState:UIControlStateNormal]; [extryB setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [extryB addTarget:self action:@selector(extryBpressed) forControlEvents:UIControlEventTouchUpInside]; self.donekeyBoardBtn = extryB; // locate keyboard view UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; UIView* keyboard; for(int i=0; i<[tempWindow.subviews count]; i++) { keyboard = [tempWindow.subviews objectAtIndex:i]; // keyboard view found; add the custom button to it if([[keyboard description] hasPrefix:@" 

Ensuite, vous devez append la méthode accessible à l’ensemble de l’application dans votre code JS.

 simulateKeyPress: function(k) { var press = jQuery.Event("keypress"); press.which = k; // place the id of your most outer html tag here $("#body").sortinggger(press); // just needed because my active element has a child element where the value should be placed in var id = document.activeElement.id.indexOf("-"); if(id != -1){ var currentTf = sap.ui.getCore().byId(document.activeElement.id.split("-")[0]); //append the value and set it (my textfield has a method setValue()) var currentTfValue = currentTf.getValue(); currentTf.setValue(currentTfValue + k); } },