iPhone UIWebview:как заставить цифровую клавиатуру? Возможно ли это?



я экспериментирую с PhoneGap для разработки некоторых приложений для iPhone. PhoneGap в основном обертывает UIWebView-он хорошо работает. Проблема в том, что мое приложение имеет несколько полей ввода, которые принимают только числовой ввод. Мне действительно нужно заставить цифровую клавиатуру вместо принятия стандартной клавиатуры по умолчанию, которая затем заставляет пользователя переключаться на числовую в каждом поле. Кто-нибудь знает, возможно ли это? Как?



разъяснения:
Я знаю, что Apple в настоящее время не обеспечивают никакой API, чтобы разрешить это. Мне интересно, может ли помочь создание пользовательского класса, унаследованного от UIWebView, или, возможно, создание пользовательской клавиатуры откроет некоторые возможности?



обновление 6 ноября 2009 года, - как отмечается ниже, компания Apple недавно обновила функциональность Safari, чтобы это, опять же, поддерживается. Поэтому принятый ответ был изменен, чтобы отразить это.



 <html>
<input type='tel'/>
<input type='number'/>
<input type='email'/>
<input />
</html>
773   10  

10 ответов:

похоже, что Mobile Safari поддерживает новые атрибуты типа ввода HTML5 почта,,поиск,tel и url. Они будут переключать клавиатуру, которая отображается. Смотрите атрибут type.

Так, например, вы могли бы сделать это:

<input type="number" />

и когда поле ввода имеет фокус, отображается цифровая клавиатура (как если бы пользователь имел полную клавиатуру и нажал "123" кнопка.

Если вы действительно хотите только цифры, можно указать:

<input type="tel" />

и тогда пользователь получит клавиатуру набора номера телефона.

Я знаю, что это работает с мобильным Safari-я только предполагаю, что он будет работать с UIWebView.

Я нашел лучшее решение-это использовать <input type="text" pattern="[0-9]*"> при разработке форм для мобильных и настольных браузеров.

с документация Apple (примечание об UIWebView):

вы не можете указать тип клавиатуры в элементах ввода. В веб-представлении отображается пользовательская клавиатура, основанная на клавиатуре по умолчанию, но включающая некоторые дополнительные элементы управления для навигации между элементами формы.

проверено на IPhone OS 3.0, эта функциональность все еще не была там, не знаю, почему Apple просто удалила эту удобную функциональность, действительно расстроилась, чтобы работать над этим прямо сейчас : (

вот список всех типов, совместимых с iOS (4.0 и выше) веб-представления:

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

Это было возможно в первой итерации iPhone OS - Safari даст цифровые клавиатуры для формирования полей с " zip " или "телефон" в их именах - но он исчез в iPhone OS 2.0.

PhoneGap не имеет функции API, чтобы переопределить это на данный момент. Это может быть что-то, над чем они работают, это определенно будет отличная функция.

iOS Mobile Safari также поддерживает:

<input type="password" />

вам нужно внести изменения в HTML часть вашего проекта Dashcode:

  1. в Dashcode открыть индекс.html в окне кода.
  2. на холсте вида, над которым вы работаете, выберите поле ввода, которое вы хотите настроить для использования оптимизированной клавиатуры.
  3. нажмите на указатель.HTML, чтобы дать ему фокус.
  4. выберите правка>найти в строке меню Dashcode.
  5. введите в поле найти точное имя, которое вы дали текстовое поле управление. Найти будет обнаружить в указателе.HTML-файл.
  6. изменить тип с type="text" до type="number".

сделано.

то, что вы также можете использовать для iOS phonegap на основе приложения является :

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

показано на рисунке ниже. Прекрасно работает с iOS 8.2 и phonegap 3.5 и выше.

iOs имеет цифровую клавиатуру UIKeyboardTypeNumbersAndPunctuation, но это не может быть вызвано из HTML (https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html)

так как на клавиатуре" tel " отсутствует пунктуация, вы должны создать это самостоятельно. Поскольку доступны пользовательские клавиатуры ios8. Или если вам просто нужна пунктуация, вы можете добавить кнопку (как добавить кнопку "Готово" на клавиатуре клавиатура в iOS) к цифровой клавиатуре, которая появляется, когда вы указываете поле ввода с type="number" pattern="[0-9]*" .

для этого: код objective-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('.');"]];
}

затем вы должны добавить метод a, который может быть доступен для широкого применения в вашем 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);
                }
            },

Comments

    Ничего не найдено.