web-dev-qa-db-fra.com

Impossible de trouver un plan de touches prenant en charge le type 4 pour le clavier iPhone-Portrait-NumberPad; utilisation de 3876877096_Portrait_iPhone-Simple-Pad_Default

J'ai téléchargé iOS 8 Gold Master pour l'iPhone et le SDK.

J'ai testé l'application et cela fonctionne bien, sauf pour une chose.

J'ai un champ de texte où un pavé numérique apparaîtra si l'utilisateur veut taper quelque chose, en plus, un bouton personnalisé est ajouté à la zone vide lorsque le clavier apparaît.

- (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];
            }
        }
    }

}

Cela fonctionnait bien jusqu'à maintenant.

Tout d'abord, je reçois cet avertissement:

Impossible de trouver un plan de touches prenant en charge le type 4 pour le clavier iPhone-Portrait-NumberPad; utilisation de 3876877096_Portrait_iPhone-Simple-Pad_Default

alors ce bouton personnalisé ne s'affiche pas non plus, ce qui, je pense, est dû à ces 2 lignes:

if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)

et

if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)

Aucune suggestion?

107
CRAZYSNAKE

J'ai aussi eu ce problème et trouvé la solution.

Vous trouverez ci-dessous le code qui fonctionnera pour iOS 8.0 ainsi que pour les versions ci-dessous.

Je l'ai testé sur iOS 7 et 8.0 (Xcode Version 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;
    }
}

J'espère que cela t'aides.

Mais je reçois toujours cet avertissement:

Impossible de trouver un plan de touches prenant en charge le type 4 pour le clavier iPhone-Portrait-NumberPad; utilisation de 3876877096_Portrait_iPhone-Simple-Pad_Default

Ignorant cet avertissement, je le fais fonctionner. S'il vous plaît, faites-moi savoir si vous pouvez obtenir un soulagement de cet avertissement.

10
iGW

Moi aussi j'ai eu ce problème après la mise à jour vers la dernière version bêta de Xcode. Les paramètres du simulateur étant actualisés, le clavier de l'ordinateur portable (externe) a été détecté. Si vous appuyez simplement sur:

iOS Simulator -> Matériel -> Clavier -> Connecter le clavier

de sorte que l’entrée soit décochée, le clavier du logiciel s’affiche à nouveau.

137
aquagremlin

L'émulateur tente de trouver un pavé numérique sur le Mac, mais celui-ci est introuvable (MacBook Pro, MacBook Air et le clavier "normal/petit" ne l'ont pas). Vous pouvez désélectionner l'option Connecter le clavier matériel ou ignorer simplement le message d'erreur, cela n'aura aucun effet négatif sur l'application.

39
darkman

J'utilise xcode avec ios 8 et décochez simplement l'option de connexion du clavier matériel dans votre simulateur-> matériel-> clavier-> connecter un clavier matériel.

Cela résoudra le problème.

12
user4600710

Il suffit d'aller à

iOS Simulator -> Hardware -> Keyboard -> Décochez l'option Connect Hardware Keyboard.

Cela résoudra le problème.

Votre clavier MAC ne fonctionnera pas après avoir effectué l'étape ci-dessus. Vous devez utiliser le clavier du simulateur.

11
Avinash651

J'ai eu le même problème dans Xcode 8.1 et iOS 10.1. Ce qui a fonctionné pour moi a été d'aller dans Simulator-> Hardware-> Keyboard et en décochant Connect Hardware Keyboard.

7
carlson

Lancer l'application en utilisant le simulateur

iOS Simulator-> Matériel-> Clavier -> iOS utilise la même présentation que OS X

Cela résoudra le problème si quelqu'un exécute son application sur son appareil.

5
Ronaldoh1

Allez dans Simulator-> Hardware-> Keyboard et décochez Connect Hardware Keyboard.

La même chose que beaucoup de réponses ci-dessus MAIS n'a pas changé pour moi jusqu'à ce que je quitte et redémarre le simulateur. xcode 8.2.1 et Simulator 10.0.

4
tdw

J'ai reçu le même message d'erreur pour deux raisons distinctes. Vous pouvez donc les ajouter à votre liste de contrôle de débogage:

Contexte: Xcode 6.4, iOS: 8.4. J'ajoutais une barre d'outils personnalisée UIBarButtons à charger avec le UIKeyboardTypeNumberPad (Swift: UIKeyboardType.numberPad), à savoir "Terminé" et "+/-". J'ai eu ce problème quand:

  1. Mon UIToolbar a été déclarée en tant que propriété, mais j'avais oublié de l'allouer/initier explicitement.

  2. J'avais laissé la dernière ligne, [myCustomToolbar sizeToFit];, ce qui semble être la même famille que la réponse de Holden (mon code ici: https://stackoverflow.com/a/32016397/489805 ) .

Bonne chance

3
AmitaiB

J'ai eu le même problème en utilisant le profil d'approvisionnement de distribution. Vérifiez que vous utilisez le profil de développeur

1
KIO

Pourquoi le code long et ne pas utiliser la barre UIToolbar? puisque l'avertissement est toujours persister?

UIToolbar fonctionne pour toute version iOS, voici mon exemple de code

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];
}
1
nferocious76

Dans votre application iOS, vous ne pouvez pas trouver un clavier numérique associé à votre OS X. Il vous suffit donc de décocher l'option de connexion du clavier matériel dans votre simulateur, dans le chemin suivant, uniquement à des fins de test:

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

Cela résoudra le problème ci-dessus.

Je pense que vous devriez aussi voir le lien ci-dessous. Il dit que c'est un bug dans le XCode à la fin du fil de discussion de ce forum!

référence

1
iMHitesh Surani

Peut-être devriez-vous réinitialiser le cadre du bouton, j'ai eu un problème aussi, et nslog la vue du clavier comme ceci:

ios8:

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

avant8:

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