Frage

Ich experimentiere mit PhoneGap auf einige iPhone-Apps zu entwickeln. PhoneGap wickelt im Grunde eine UIWebView - es funktioniert gut. Das Problem ist, die meine app mehrere Eingabefelder haben, die nur numerische Eingabe nehmen. Ich muß wirklich über die numerische Tastatur erzwingen, anstatt die Standard-Standard-Tastatur zu akzeptieren, die dann den Benutzer dazu zwingt, die numerischen auf jedem Feld zu wechseln. Weiß jemand, ob dies möglich ist? Wie?

Zur Verdeutlichung: Ich weiß, dass Apple derzeit keine API zur Verfügung stellen, dies zu ermöglichen. Ich frage mich, ob eine benutzerdefinierte Klasse erstellen, die von UIWebView geerbt helfen könnte, oder vielleicht eine benutzerdefinierte Tastatur zu schaffen würde einige Möglichkeiten eröffnen?

Update 6. November 2009 - Wie weiter unten erwähnt, Apple hat vor kurzer Safari Funktionalität aktualisiert, so dass dies wiederum unterstützt. So wurde die akzeptierte Antwort geändert, dass widerzuspiegeln.

 <html>
<input type='tel'/>
<input type='number'/>
<input type='email'/>
<input />
</html>
War es hilfreich?

Lösung

Es sieht aus wie Mobile Safari die neuen HTML5 input type Attribute von unterstützt E-Mail Zahl Suche tel und url . Diese schaltet die Tastatur, die angezeigt wird. Siehe das type-Attribut .

So zum Beispiel, könnten Sie dies tun:

<input type="number" />

Und wenn das Eingabefeld den Fokus hat, wird die Anzahl Tastatur angezeigt (als ob der Benutzer die vollständige Tastatur hatte und drücken Sie die Taste „123“.

Wenn Sie wirklich nur Zahlen möchten, können Sie an:

<input type="tel" />

Und dann würde der Benutzer die Telefonnummer Wähltastatur erhalten.

Ich weiß, das mit Mobile Safari funktioniert -. Ich gehe davon aus nur wird es mit UIWebView arbeiten

Andere Tipps

Ich fand eine bessere Lösung ist <input type="text" pattern="[0-9]*"> zu verwenden, wenn Formulare für mobile und Desktop-Browser zu entwerfen.

Von Apples Dokumentation (die Notiz UIWebView):

  

Sie können den Tastaturtyp in Eingabeelemente angeben. Die Web-Ansicht zeigt eine benutzerdefinierte Tastatur, die auf der Standard-Tastatur basiert, sondern enthält einige zusätzliche Steuerelemente für die Navigation zwischen Formularelementen.

Checked auf IPhone OS 3.0 war diese Funktionalität noch nicht da, nicht sicher, warum Apple gerade diese praktische Funktionalität entfernt, wirklich aufgeregt jetzt auf dieses Recht auf Arbeit: (

Hier ist eine Liste aller Art kompatibel mit iOS (4.0 und höher) Webansichten:

http://conecode.com/news/2011 / 12 / mobile-Safari-UIWebView-Input-Typen /

Dies war möglich, in der ersten Iteration des iPhone OS - Safari würde numerische Tastatur geben Felder mit ‚zip‘ oder ‚Telefon‘ zu bilden, in deren Namen - aber es verschwand in iPhone OS 2.0

.

PhoneGap nicht über eine API-Funktion dies zur Zeit außer Kraft zu setzen. Es kann sein, etwas, das sie gerade arbeitet, es wäre auf jeden Fall eine nette Funktion sein.

iOS Mobile Safari unterstützt auch:

<input type="password" />

Sie müssen die Änderung im HTML-Teil Ihres Dashcode-Projekt machen:

  1. In Dashcode offen index.html im Code-Fenster.
  2. Auf der Leinwand der Ansicht, die Sie gerade arbeiten, wählen Sie das Eingabefeld, das Sie die optimierte Tastatur verwenden festlegen möchten.
  3. Klicken Sie auf index.html um ihn zu aktivieren.
  4. Wählen Sie Bearbeiten> Suchen aus der Dashcode Menüleiste.
  5. Geben Sie in das Suchfeld den genauen Namen, den Sie in das Textfeld Kontrolle gab. Finden Sie die Kontrolle in der index.html-Datei.
  6. Ändern Sie den Typ von type="text" type="number".

Fertig.

Was können Sie auch für den Einsatz iOS phonegap basierte Anwendung ist:

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

Es ist in der unten stehenden Abbildung dargestellt. Funktioniert wunderbar mit iOS 8.2 und phonegap 3.5 und höher.

iOs verfügt über eine numerische Tastatur UIKeyboardTypeNumbersAndPunctuation, aber dies kann nicht von HTML ( https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html )

da auf der „tel“ Tastatur die Interpunktion fehlt Sie diese auf eigene Faust zu schaffen haben. Da ios8 individuelle Tastaturen zur Verfügung. Oder wenn Sie brauchen nur die Interpunktion Sie auf eine Schaltfläche hinzufügen können ( Wie eine Schaltfläche ‚Fertig‘ auf Numpad Tastatur in iOS ) an die numerischen Tastatur hinzufügen, die erscheint, wenn Sie Ihr Eingabefeld mit type="number" pattern="[0-9]*" angeben.

Um dies zu tun:. Den Objective-C-Code

-(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('.');"]];
}

Dann sollten Sie eine Methode hinzufügen, die Anwendung breit in Ihrem JS-Code zugegriffen werden kann.

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);
                }
            },
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top