키보드 iPhone-Portrait-NumberPad에 대해 유형 4를 지원하는 키 플레인을 찾을 수 없습니다. 3876877096_Portrait_iPhone-Simple-Pad_Default 사용


114

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)

어떤 제안?

답변:


10

나는 또한이 문제가 있었고 해결책을 찾았습니다.

아래는 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 사용

이 경고를 무시하고 작동합니다. 이 경고에서 구제를받을 수 있는지 알려주십시오.


나를 위해 훌륭하게 일했습니다. 고마워 친구.
CRAZYSNAKE 2014 년

addDoneButton 또는 removeDoneButton : stackoverflow.com/questions/26031798/… iOS-6 / 7 / 8 장치의 XCode-5.1.1에서 위 코드를 실행합니다. 완벽하게 작동합니다.
alishaik786

1
-(void) doneButton : (UIButton *) 발신자 {NSLog (@ "fdsfdsdsf"); }
SampathKumar 2014

이 모든 작업을 수행했지만 완료 버튼을 클릭 할 수 없습니다.
SergStav

iOS 8.3 이상의 최신 릴리스에서 이전에 게시 된 코드에 실패하는 것이 변경되었습니다. iOS 8.3 이상에 대한 검사를 추가했습니다. 향후 iOS 버전에서는 작동이 중지 될 수 있습니다. 위를 확인하십시오.
iGW

143

나도 최신 Xcode 베타로 업데이트 한 후이 문제가 발생했습니다. 시뮬레이터의 설정이 새로 고쳐져 랩톱 (외부) 키보드가 감지되었습니다. 누르기 만하면 :

iOS 시뮬레이터-> 하드웨어-> 키보드-> 하드웨어 키보드 연결

항목이 선택 해제되도록하면 소프트웨어 키보드가 다시 한 번 표시됩니다.


14
실수로 Shift + Cmd + K를 쳤을 것입니다!
에릭

1
iOS 시뮬레이터-> 하드웨어-> 키보드-> 하드웨어 키보드 연결 체크를 해제하면 해결되었습니다
EFE

이것은 시뮬레이터에있을 때 오류를 발생시키는 검사 만 건너 뜁니다. 버그와 키보드 스왑은 실제 장치의 실제 세계에서 여전히 발생합니다.
Zack

그래도 작동하지 않으면 시뮬레이터-> 하드웨어-> 모든 콘텐츠 및 설정 지우기를 선택합니다.
Wimukthi Rajapaksha

1
버전 11.5의 경우; iOS 시뮬레이터-> I / O-> 키보드-> 하드웨어 키보드 연결
miletliyusuf

40

에뮬레이터가 Mac에서 숫자 키패드를 찾으려고하지만 찾을 수 없습니다 (MacBook Pro, MacBook Air 및 "보통 / 소형"키보드에는 없음). 하드웨어 키보드 연결 옵션을 선택 취소하거나 오류 메시지를 무시할 수 있습니다. 이는 응용 프로그램에 부정적인 영향을 미치지 않습니다.


16

그냥 이동

iOS 시뮬레이터-> 하드웨어-> 키보드-> 하드웨어 키보드 연결 옵션을 선택 취소합니다.

이렇게하면 문제가 해결됩니다.

위의 단계를 수행하면 MAC 키보드가 작동하지 않습니다. 시뮬레이터 키보드를 사용해야합니다.


12

iOS 8에서 xcode를 사용하고 있습니다. Simulator-> Hardware-> Keyboard-> Connect Hardware Keyboard에서 연결 harware 키보드 옵션을 선택 취소하십시오.

이것은 문제를 해결할 것입니다.


이 iOS 시뮬레이터가 어디에 있는지 전혀 모릅니다. 아니면 하드웨어가 어디에 있습니까? iPhone처럼 보이는 실제 시뮬레이터에 대해 이야기하고 있는데이를 통해 하드웨어를 찾았습니까?
Thomas

7

Xcode 8.1 및 iOS 10.1에서 동일한 문제가 발생했습니다. 나를 위해 일한 것은 Simulator-> Hardware-> Keyboard로 이동하여 Connect Hardware Keyboard를 선택 취소하는 것이 었습니다.


7

Simulator-> Hardware-> Keyboard로 이동하여 Connect Hardware Keyboard를 선택 취소합니다.

위의 많은 답변과 동일 하지만 시뮬레이터를 종료하고 다시 시작할 때까지 변경되지 않았습니다. xcode 8.2.1 및 Simulator 10.0.


5

시뮬레이터를 사용하여 앱 실행

iOS 시뮬레이터-> 하드웨어-> 키보드-> iOS는 OS X와 ​​동일한 레이아웃을 사용합니다.

누군가가 기기에서 앱을 실행하는 경우 문제가 해결됩니다.


3

두 가지 다른 이유로 동일한 오류 메시지가 표시되었으므로 디버깅 검사 목록에 추가 할 수 있습니다.

컨텍스트 : Xcode 6.4, iOS : 8.4. (Swift :) , 즉 "완료"및 "+/-" UIBarButton와 함께로드 할 사용자 지정 s가 있는 도구 모음을 추가했습니다 . 다음과 같은 경우에이 문제가 발생했습니다.UIKeyboardTypeNumberPadUIKeyboardType.numberPad

  1. 내 UIToolbar가 속성으로 선언되었지만 명시 적으로 할당 / 초기화하는 것을 잊었습니다.

  2. 나는 마지막 줄을 그만두고 [myCustomToolbar sizeToFit]; Holden의 대답과 같은 가족 인 것처럼 들리는 (여기 내 코드 : https://stackoverflow.com/a/32016397/4898050 ).

행운을 빕니다


2

iOS 앱에서 OS X에 연결된 숫자 키패드를 찾을 수 없습니다. 따라서 테스트 목적으로 다음 경로에서 시뮬레이터의 하드웨어 키보드 연결 옵션을 선택 취소하면됩니다.

Simulator -> Hardware -> Keyboard -> Connect Hardware Keyboard

위의 문제가 해결됩니다.

아래 링크도 보셔야한다고 생각합니다. 그것은 bug에서 XCode 그 포럼 게시물 스레드의 끝!

참고


1

배포 프로비저닝 프로파일을 사용하여 동일한 문제가 발생했습니다. 개발자 프로필을 사용하고 있는지 확인


1

왜 긴 코드이고 UIToolbar를 사용하지 않습니까? 경고가 여전히 지속되기 때문에?

UIToolbar는 모든 iOS 버전에서 작동합니다. 여기 내 샘플 코드가 있습니다.

UIToolbar *doneToolbar = [[UIToolbar alloc] initWithFrame:(CGRect){0, 0, 50, 50}]; // Create and init
doneToolbar.barStyle = UIBarStyleBlackTranslucent; // Specify the preferred barStyle
doneToolbar.items = @[
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(doneEditAction)] // Add your target action
]; // Define items -- you can add more

yourField.inputAccessoryView = doneToolbar; // Now add toolbar to your field's inputview and run
[doneToolbar sizeToFit]; // call this to auto fit to the view

- (void)doneEditAction {
    [self.view endEditing:YES];
}

0

어쩌면 당신은 버튼의 프레임을 재설정해야 할 수도 있고, 나도 약간의 문제가 있었고, 다음과 같이 키보드보기를 nslog해야합니다.

ios8 :

"<UIInputSetContainerView: 0x7fef0364b0d0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7fef0364b1e0>>"

before8 :

"<UIPeripheralHostView: 0x11393c860; frame = (0 352; 320 216); autoresizesSubviews = NO; layer = <CALayer: 0x11393ca10>>"

-1

좋아, 비슷한 오류가 발생했을 때 iOS 9, iOS 8 이하의 앱에서 '완료'버튼이 표시되고 작동하는 간단한 수정 사항이 있습니다. 앱을 실행하고 'View 's Hierarchy'(즉, 앱이 실행되는 동안 디버그 영역 표시 줄에서 'View Hierarchy'아이콘을 클릭)를 통해 확인한 후 확인할 수 있습니다. 장치에서 되고 Storyboard에서보기를 검사 )를 통해 본 후 키보드가 표시되는 것을 관찰 할 수 있습니다. iOS 8 이하 버전과 비교하여 iOS 9의 다른 창을 고려해야합니다. addButtonToKeyboard

- (id)addButtonToKeyboard
{
if (!doneButton)
{
   // 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];
}

NSArray *windows = [[UIApplication sharedApplication] windows];
//Check to see if running below iOS 9,then return the second window which bears the keyboard   
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0) {
return windows[windows.count - 2];
}
else {
UIWindow* keyboardWithDoneButtonWindow = [ windows lastObject];
return keyboardWithDoneButtonWindow;
    }
}

그리고 이것은 당신이 수있는 방법입니다 removeKeyboardButton 원하는 경우 키보드.

- (void)removeKeyboardButton {

id windowTemp = [self addButtonToKeyboard];

if (windowTemp) {

    for (UIView *doneButton in [windowTemp subviews]) {
        if ([doneButton isKindOfClass:[UIButton class]]) {
            [doneButton setHidden:TRUE];
        }
    }
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.