iPhone UIWebview : 숫자 키보드를 강제하는 방법? 가능합니까?
일부 iPhone 앱을 개발하기 위해 PhoneGap을 실험하고 있습니다. PhoneGap은 기본적으로 UIWebView를 래핑합니다. 잘 작동합니다. 문제는 내 앱에 숫자 입력 만받는 여러 입력 필드가 있다는 것입니다. 기본 표준 키보드를 사용하는 대신 숫자 키패드를 강제로 사용해야합니다. 그러면 사용자가 모든 필드에서 숫자로 전환해야합니다. 이것이 가능한지 아는 사람이 있습니까? 어떻게?
설명 : Apple이 현재이를 허용하는 API를 제공하지 않는다는 것을 알고 있습니다. UIWebView에서 상속 된 사용자 지정 클래스를 만드는 것이 도움이 될지, 아니면 사용자 지정 키보드를 만드는 것이 몇 가지 가능성을 열어 줄 수 있는지 궁금합니다.
2009 년 11 월 6 일 업데이트-아래에서 언급했듯이 Apple은 최근에 safari 기능을 업데이트하여 다시 한 번 지원합니다. 그래서 받아 들여지는 대답은 그것을 반영하기 위해 변경되었습니다.
<html>
<input type='tel'/>
<input type='number'/>
<input type='email'/>
<input />
</html>
Mobile Safari가 email , number , search , tel 및 url 의 새로운 HTML5 입력 유형 속성을 지원하는 것 같습니다 . 표시되는 키보드를 전환합니다. type 속성을 참조하십시오 .
예를 들어 다음과 같이 할 수 있습니다.
<input type="number" />
입력 상자에 포커스가 있으면 숫자 키보드가 표시됩니다 (사용자가 전체 키보드를 가지고 "123"버튼을 누르는 것처럼).
정말로 숫자 만 원하는 경우 다음을 지정할 수 있습니다.
<input type="tel" />
그런 다음 사용자는 전화 번호 다이얼 키패드를 받게됩니다.
나는 이것이 Mobile Safari에서 작동한다는 것을 알고 있습니다 .UIWebView와 함께 작동한다고 가정합니다.
더 나은 해결책은 <input type="text" pattern="[0-9]*">
모바일 및 데스크톱 브라우저 용 양식을 디자인 할 때 사용하는 것 입니다.
에서 애플의 문서 (의 UIWebView에 대한 메모) :
입력 요소에는 키보드 유형을 지정할 수 없습니다. 웹보기는 기본 키보드를 기반으로하지만 양식 요소 사이를 탐색하기위한 몇 가지 추가 제어를 포함하는 사용자 정의 키보드를 표시합니다.
IPhone OS 3.0에서 확인한 결과,이 기능은 여전히 존재하지 않았고, 왜 Apple이이 편리한 기능을 제거했는지 확신 할 수 없었습니다.
다음은 iOS (4.0 이상) 웹보기와 호환되는 모든 유형의 목록입니다.
http://conecode.com/news/2011/12/mobile-safari-uiwebview-input-types/
이것은 iPhone OS의 첫 번째 반복에서 가능했습니다. Safari는 이름에 'zip'또는 'phone'이 포함 된 필드를 형성하는 숫자 키보드를 제공했지만 iPhone OS 2.0에서는 사라졌습니다.
PhoneGap에는 현재이를 재정의하는 API 함수가 없습니다. 그들이 작업중인 것일 수도 있고 확실히 멋진 기능 일 것입니다.
iOS Mobile Safari는 다음도 지원합니다.
<input type="password" />
Dashcode 프로젝트의 HTML 부분을 변경해야합니다.
- Dashcode에서 코드 창에서 index.html을 엽니 다.
- 작업중인보기의 캔버스에서 최적화 된 키보드를 사용하도록 설정할 입력 필드를 선택하십시오.
- index.html을 클릭하여 초점을 맞 춥니 다.
- Dashcode 메뉴 바에서 edit> find를 선택하십시오.
- 텍스트 필드 컨트롤에 지정한 정확한 이름을 찾기 상자에 입력합니다. Find는 index.html 파일에서 컨트롤을 찾습니다.
- 유형을에서
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 ) 에서 호출 할 수 없습니다.
"전화"키보드에서는 구두점이 누락되었으므로 직접 만들어야합니다. ios8 사용자 정의 키보드를 사용할 수 있습니다. 또는 구두점 만 필요한 경우를 사용하여 입력 필드를 지정할 때 팝업되는 숫자 키보드에 버튼 (iOS에서 숫자 키패드 키보드에 '완료'버튼을 추가하는 방법)을 추가 할 수 있습니다 type="number" pattern="[0-9]*"
.
To do so: the 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('.');"]];
}
Then you should add the a method which can be accessed application wide in your JS code.
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);
}
},
'Programing' 카테고리의 다른 글
numpy.array () 데이터를 올바르게 저장하고로드하는 방법은 무엇입니까? (0) | 2020.12.01 |
---|---|
Laravel eloquent 모델로 3 개의 테이블을 결합하는 방법 (0) | 2020.12.01 |
Jmeter 대안 (0) | 2020.12.01 |
LaTex 턱받이 소스 컴파일 (0) | 2020.12.01 |
str.format ()은 KeyError를 발생시킵니다. (0) | 2020.12.01 |