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

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.