Question

J'expérimente avec PhoneGap pour développer des applications iPhone. PhoneGap enveloppe essentiellement un UIWebView - il fonctionne bien. Le problème est que mon application a plusieurs champs d'entrée qui ne prennent que l'entrée numérique. J'ai vraiment besoin de forcer le pavé numérique au lieu d'accepter le clavier standard par défaut, ce qui oblige alors l'utilisateur à passer à la numérique sur tous les domaines. Est-ce que quelqu'un sait si cela est possible? Comment?

Précision: Je sais que Apple ne fournit actuellement aucun API pour permettre cela. Je me demande si la création d'une classe personnalisée qui a hérité de UIWebView pourrait aider, ou peut-être créer un clavier personnalisé ouvrirait des possibilités?

Mise à jour 6 novembre 2009 - Comme il est indiqué ci-dessous, Apple a récemment mis à jour la fonctionnalité de safari pour que ce soit, encore une fois, pris en charge. Donc, la réponse acceptée a été changé pour refléter.

 <html>
<input type='tel'/>
<input type='number'/>
<input type='email'/>
<input />
</html>
Était-ce utile?

La solution

Il ressemble à Safari Mobile prend en charge les nouveaux attributs de type d'entrée HTML5 email , nombre , recherche , tel et url . Ceux-ci basculeront le clavier qui est affiché. Voir attribut type.

Ainsi, par exemple, vous pouvez faire ceci:

<input type="number" />

Et quand la zone de saisie a le focus, le clavier numéro est indiqué (comme si l'utilisateur avait le clavier complet et appuyez sur le bouton « 123 ».

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

<input type="tel" />

Et l'utilisateur obtiendrait le clavier de numérotation numéro de téléphone.

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

Autres conseils

J'ai trouvé une meilleure solution est d'utiliser la conception de formulaires <input type="text" pattern="[0-9]*"> pour quand les deux navigateurs mobiles et de bureau.

documentation d'Apple (la note sur UIWebView):

  

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

Vérifié sur iPhone OS 3.0, cette fonctionnalité était toujours pas là, pas sûr pourquoi Apple vient enlever cette fonctionnalité à portée de main, vraiment bouleversé travailler à ce moment: (

Voici une liste de tous les types compatibles avec iOS (4.0 et plus) vues web:

http://conecode.com/news/2011 / 12 / mobile Safari-UIWebView-input-types /

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

.

PhoneGap ne possède pas de fonction API pour remplacer ce au moment. Il est peut-être quelque chose qu'ils travaillent, ce serait sans aucun doute une fonctionnalité intéressante.

iOS Safari Mobile prend également en charge:

<input type="password" />

Vous devez faire le changement dans la partie HTML de votre projet Dashcode:

  1. Dans Dashcode index.html ouvert dans la fenêtre de code.
  2. Sur la toile de la vue que vous travaillez, sélectionnez le champ d'entrée que vous souhaitez définir d'utiliser le clavier optimisé.
  3. Cliquez sur index.html pour lui donner le focus.
  4. Sélectionnez Modifier> Rechercher dans la barre de menu Dashcode.
  5. Tapez dans la zone de trouver le nom exact que vous avez donné au contrôle du champ de texte. Trouvez localisera le contrôle dans le fichier index.html.
  6. Changer le type de type="text" à type="number".

Fait.

Qu'est-ce que vous pouvez également utiliser pour iOS PhoneGap application est basée:

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

Il est montré dans l'image ci-dessous. Fonctionne parfaitement avec iOS 8.2 et PhoneGap 3.5 et au-dessus.

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

depuis le « tel » clavier la ponctuation est manquant, vous devez créer sur votre propre. Depuis ios8 claviers personnalisés sont disponibles. Ou si vous avez juste besoin de la ponctuation, vous pouvez ajouter un bouton ( Comment ajouter un bouton « Terminé » pour clavier dans iOS numpad) sur le 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 objectif-c

-(void)keyboardWillHide:(NSNotification *)note
{
    [self.donekeyBoardBtn removeFromSuperview];
    [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat: @"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:@"<UIInputSetContainerView"] == YES)
    {

        for(int i = 0 ; i < [keyboard.subviews count] ; i++)
        {
            UIView* hostkeyboard = [keyboard.subviews objectAtIndex:i];

            if([[hostkeyboard description] hasPrefix:@"<UIInputSetHost"] == YES)
            {
                UIButton* donebtn = (UIButton*)[hostkeyboard viewWithTag:67123];
                if (donebtn == nil){
                    //to avoid adding again and again as per my requirement (previous and next button on keyboard)

                    if([[self printKeyboardType] isEqualToString: @"UIKeyboardTypePhonePad"]){
                        [keyboard addSubview:extryB];
                    }

                }
            }
        }
    }
    //[keyboard addSubview:extryB];
}
[UIView setAnimationsEnabled:YES];
// animate
[UIView animateWithDuration:0.5 animations:^{
    extryB.frame = CGRectMake(0, self.view.frame.size.height-50, 100, 50);
}];
}

-(NSString*)printKeyboardType
{

NSString* strKeyboardType = @"";
switch (self.textDocumentProxy.keyboardType) {
    case UIKeyboardTypeAlphabet:
        strKeyboardType = @"UIKeyboardTypeAlphabet";
        break;
    case UIKeyboardTypeDecimalPad:
        strKeyboardType = @"UIKeyboardTypeAlphabet";
        break;
    case UIKeyboardTypeDefault:
        strKeyboardType = @"UIKeyboardTypeDefault";
        break;
    case UIKeyboardTypeEmailAddress:
        strKeyboardType = @"UIKeyboardTypeEmailAddress";
        break;
    case UIKeyboardTypeTwitter:
        strKeyboardType = @"UIKeyboardTypeTwitter";
        break;
    case UIKeyboardTypeNamePhonePad:
        strKeyboardType = @"UIKeyboardTypeNamePhonePad";
        break;
    case UIKeyboardTypeNumberPad:
        strKeyboardType = @"UIKeyboardTypeNumberPad";
        break;
    case UIKeyboardTypeNumbersAndPunctuation:
        strKeyboardType = @"UIKeyboardTypeNumbersAndPunctuation";
        break;
    case UIKeyboardTypePhonePad:
        strKeyboardType = @"UIKeyboardTypePhonePad";
        break;
    case UIKeyboardTypeURL:
        strKeyboardType = @"UIKeyboardTypeURL";
        break;
    case UIKeyboardTypeWebSearch:
        strKeyboardType = @"UIKeyboardTypeWebSearch";
        break;
    default:
        strKeyboardType = @"UNKNOWN";
        break;
}
NSLog(@"self.textDocumentProxy.keyboardType=%@", strKeyboardType);
return strKeyboardType;
}

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

- (void)extryBpressed{
    //simulates a "." press
    [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat: @"simulateKeyPress('.');"]];
}

Ensuite, vous devez ajouter une méthode qui peut être l'application accessible large 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").trigger(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);
                }
            },
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top