iPhone 및 SDK 용 iOS 8 Gold Master를 다운로드했습니다.
나는 앱을 테스트했고 한 가지를 제외하고는 잘 작동합니다.
사용자가 무언가를 입력하고 싶을 때 숫자 패드가 나타나는 텍스트 필드가 있으며, 키보드가 나타날 때 빈 영역에 사용자 정의 버튼이 추가됩니다.
- (void)addButtonToKeyboard
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
// create custom button
UIButton * doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
doneButton.frame = CGRectMake(-2, 163, 106, 53);
doneButton.adjustsImageWhenHighlighted = NO;
[doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
[doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
[doneButton addTarget:self action:@selector(saveNewLead:) forControlEvents:UIControlEventTouchUpInside];
// 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 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)
[keyboard addSubview:doneButton];
} else {
if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
[keyboard addSubview:doneButton];
}
}
}
}
이것은 지금까지 잘 작동했습니다.
우선, 다음과 같은 경고가 표시됩니다.
키보드 iPhone-Portrait-NumberPad에 대해 유형 4를 지원하는 키 플레인을 찾을 수 없습니다. 3876877096_Portrait_iPhone-Simple-Pad_Default 사용
그런 다음 해당 사용자 정의 버튼도 표시되지 않습니다.
if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)
과
if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
어떤 제안?
답변
나는 또한이 문제가 있었고 해결책을 찾았습니다.
아래는 iOS 8.0 및 아래 버전에서 작동하는 코드입니다.
iOS 7 및 8.0 (Xcode 버전 6.0.1)에서 테스트했습니다.
- (void)addButtonToKeyboard
{
// create custom button
self.doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
//This code will work on iOS 8.3 and 8.4.
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.3) {
self.doneButton.frame = CGRectMake(0, [[UIScreen mainScreen] bounds].size.height - 53, 106, 53);
} else {
self.doneButton.frame = CGRectMake(0, 163+44, 106, 53);
}
self.doneButton.adjustsImageWhenHighlighted = NO;
[self.doneButton setTag:67123];
[self.doneButton setImage:[UIImage imageNamed:@"doneup1.png"] forState:UIControlStateNormal];
[self.doneButton setImage:[UIImage imageNamed:@"donedown1.png"] forState:UIControlStateHighlighted];
[self.doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];
// locate keyboard view
int windowCount = [[[UIApplication sharedApplication] windows] count];
if (windowCount < 2) {
return;
}
UIWindow *tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
UIView *keyboard;
for (int i = 0; i < [tempWindow.subviews count]; i++) {
keyboard = [tempWindow.subviews objectAtIndex:i];
// keyboard found, add the button
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.3) {
UIButton *searchbtn = (UIButton *)[keyboard viewWithTag:67123];
if (searchbtn == nil)
[keyboard addSubview:self.doneButton];
} else {
if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) {
UIButton *searchbtn = (UIButton *)[keyboard viewWithTag:67123];
if (searchbtn == nil)//to avoid adding again and again as per my requirement (previous and next button on keyboard)
[keyboard addSubview:self.doneButton];
} //This code will work on iOS 8.0
else 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)
[hostkeyboard addSubview:self.doneButton];
}
}
}
}
}
}
>
- (void)removedSearchButtonFromKeypad
{
int windowCount = [[[UIApplication sharedApplication] windows] count];
if (windowCount < 2) {
return;
}
UIWindow *tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
for (int i = 0 ; i < [tempWindow.subviews count] ; i++)
{
UIView *keyboard = [tempWindow.subviews objectAtIndex:i];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.3){
[self removeButton:keyboard];
} else if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) {
[self removeButton:keyboard];
} else 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) {
[self removeButton:hostkeyboard];
}
}
}
}
}
- (void)removeButton:(UIView *)keypadView
{
UIButton *donebtn = (UIButton *)[keypadView viewWithTag:67123];
if(donebtn) {
[donebtn removeFromSuperview];
donebtn = nil;
}
}
도움이 되었기를 바랍니다.
하지만, 여전히이 경고가 표시됩니다.
키보드 iPhone-Portrait-NumberPad에 대해 유형 4를 지원하는 키 플레인을 찾을 수 없습니다. 3876877096_Portrait_iPhone-Simple-Pad_Default 사용
이 경고를 무시하고 작동합니다. 이 경고에서 구제를받을 수 있는지 알려주십시오.
답변
나도 최신 Xcode 베타로 업데이트 한 후이 문제가 발생했습니다. 시뮬레이터의 설정이 새로 고쳐져 랩톱 (외부) 키보드가 감지되었습니다. 누르기 만하면 :
iOS 시뮬레이터-> 하드웨어-> 키보드-> 하드웨어 키보드 연결
항목이 선택 해제되도록하면 소프트웨어 키보드가 다시 한 번 표시됩니다.
답변
에뮬레이터가 Mac에서 숫자 키패드를 찾으려고하지만 찾을 수 없습니다 (MacBook Pro, MacBook Air 및 “보통 / 소형”키보드에는 없음). 하드웨어 키보드 연결 옵션을 선택 취소하거나 오류 메시지를 무시할 수 있습니다. 이는 응용 프로그램에 부정적인 영향을 미치지 않습니다.
답변
그냥 이동
iOS 시뮬레이터-> 하드웨어-> 키보드-> 하드웨어 키보드 연결 옵션을 선택 취소합니다.
이렇게하면 문제가 해결됩니다.
위의 단계를 수행하면 MAC 키보드가 작동하지 않습니다. 시뮬레이터 키보드를 사용해야합니다.
답변
iOS 8에서 xcode를 사용하고 있습니다. Simulator-> Hardware-> Keyboard-> Connect Hardware Keyboard에서 연결 harware 키보드 옵션을 선택 취소하십시오.
이것은 문제를 해결할 것입니다.
답변
Xcode 8.1 및 iOS 10.1에서 동일한 문제가 발생했습니다. 나를 위해 일한 것은 Simulator-> Hardware-> Keyboard로 이동하여 Connect Hardware Keyboard를 선택 취소하는 것이 었습니다.
답변
Simulator-> Hardware-> Keyboard로 이동하여 Connect Hardware Keyboard를 선택 취소합니다.
위의 많은 답변과 동일 하지만 시뮬레이터를 종료하고 다시 시작할 때까지 변경되지 않았습니다. xcode 8.2.1 및 Simulator 10.0.