キーボードiPhone-Portrait-NumberPadのタイプ4をサポートするキープレーンが見つかりません。3876877096_Portrait_iPhone-Simple-Pad_Defaultを使用


114

iPhoneおよびSDK用のiOS 8ゴールドマスターをダウンロードしました。

私はアプリをテストしましたが、1つのことを除いて、それは正常に動作します。

ユーザーが何かを入力したい場合にテンキーが表示されるテキストフィールドがあります。さらに、キーボードが表示されたときに、空の領域にカスタムボタンが追加されます。

- (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を使用

次に、そのカスタムボタンも表示されていません。これは、次の2行のためです。

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 14

addDoneButtonまたはremoveDoneButtonの場合:stackoverflow.com/questions/26031798/…iOS-6 / 7/8デバイスのXCode-5.1.1で上記のコードを実行します。完璧に働いています。
alishaik786 2014

1
-(void)doneButton:(UIButton *)sender {NSLog(@ "fdsfdsdsf"); }
SampathKumar 2014年

私はこのすべてのアクションを行いましたが、完了したボタンはクリックできません、私を助けてもらえますか?
SergStav 2015

iOS 8.3以降の最新リリースでは、以前に投稿されたコードに失敗する何かが変更されました。iOS 8.3以降のチェックを追加しました。将来のiOSバージョンでは機能しなくなる可能性があります。上記をご確認ください。
iGW、2015

143

最新のXcode Betaにアップデートした後、私もこの問題を抱えていました。シミュレーターの設定が更新されたため、ラップトップ(外付け)キーボードが検出されていました。単に押すと:

iOSシミュレータ->ハードウェア->キーボード->ハードウェアキーボードの接続

エントリのチェックを外すと、ソフトウェアキーボードが再び表示されます。


14
誤ってShift + Cmd + Kを押した可能性があります。
Eric

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を使用しています。シミュレータ->ハードウェア->キーボード->ハードウェアキーボードの接続で、ハードウェアキーボードの接続オプションをオフにしてください。

これで問題は解決します。


文字通り、このiOSシミュレータの場所はわかりません。またはハードウェアはどこにありますか?あなたはiPhoneのようなもののような実際のシミュレータについて話しているのですが、それを通して私はハードウェアを見つけましたか?
トーマス

7

Xcode 8.1とiOS 10.1で同じ問題が発生しました。私にとってうまくいったのは、シミュレータ->ハードウェア->キーボードに入り、ハードウェアキーボードの接続をオフにすることでした。


7

Simulator-> Hardware-> Keyboardに移動し、Connect Hardware Keyboardのチェックを外します。

上記の多くの答えと同じだが、私が終了するまで、私のために変更して、シミュレータを再起動しませんでした。xcode 8.2.1およびSimulator 10.0。


5

シミュレーターを使用してアプリを実行する

iOSシミュレータ->ハードウェア->キーボード-> iOSはOS Xと同じレイアウトを使用

これにより、誰かがデバイスでアプリを実行している場合に問題が修正されます


3

2つの理由で同じエラーメッセージが表示されたので、デバッグチェックリストに追加できます。

コンテキスト: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]アイコンをクリックし、ストーリーボードでビューを調べた後)、キーボードが表示されていることを確認できます。 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;
    }
}

そして、これはあなたが望むならキーボードからKeyboardButtonを取り除くことができる方法です。

- (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.