Partage
  • Partager sur Facebook
  • Partager sur Twitter

[iPhone] Créer un clavier spécial ?

Sujet résolu
    22 février 2012 à 17:38:06

    Bonjour à tous.

    Je suis en train de créer une petite application iPhone, il s'agit d'un Pendu.
    Je voudrais donc à cette occasion utiliser un clavier bien spécifique : composé des 26 lettres de l'alphabet, et mieux si possible, désactiver les touches correspondant aux lettres déjà essayées pour le mot en cours.
    J'ai jeté un oeil du côté de l'Interface Builder, et parmi les keyboards disponibles, je ne pense pas qu'il y en ait qui me convienne, et de plus je ne sais pas comment désactiver les lettres.
    Des idées ?
    • Partager sur Facebook
    • Partager sur Twitter
      23 février 2012 à 10:44:16

      Salut l'ami!

      Si tu veux modifier le clavier, tu vas devoir faire ça manuellement, dans le code.

      La solution consiste à créer une notification dans ton fichier qui execute une fonction dès que le keyboard va être affiché:

      - (void)viewWillAppear:(BOOL)animated {
      	// Register the observer for the keyboardWillShow event
      	[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardDidShowNotification object:nil];
      }
      


      Ici la fonction appelée sera: keyboardWillShow:

      Ensuite tu crées ta fonction "keyboardWillShow":

      - (void)keyboardWillShow:(NSNotification *)notification {
      	
      	
      	UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
          doneButton.frame = CGRectMake(0, 163, 53, 53);
      	doneButton.adjustsImageWhenHighlighted = NO;
          [doneButton setImage:[UIImage imageNamed:@"keybdoneup.png"] forState:UIControlStateNormal];
          [doneButton setImage:[UIImage imageNamed:@"keybdonedown.png"] forState:UIControlStateHighlighted];
          [doneButton addTarget:self action:@selector(doneButton) forControlEvents:UIControlEventTouchUpInside];
      	
      	UIButton *dotButton = [UIButton buttonWithType:UIButtonTypeCustom];
          dotButton.frame = CGRectMake(53, 163, 53, 53);
      	dotButton.adjustsImageWhenHighlighted = NO;
          [dotButton setImage:[UIImage imageNamed:@"keybdotdown.png"] forState:UIControlStateNormal];
          [dotButton setImage:[UIImage imageNamed:@"keybdotup.png"] forState:UIControlStateHighlighted];
          [dotButton addTarget:self action:@selector(dotButton) 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([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
      			[keyboard addSubview:doneButton];
      			[keyboard addSubview:dotButton];
      	}
      	for (int i = 0; i < [tempWindow.subviews count]; i++) {
      				keyboard = [tempWindow.subviews objectAtIndex:i];
      				// keyboard view found; add the custom button to it
      				if ([[keyboard description] hasPrefix:@"<UIPeripheralHostView"] == YES) {
      					[keyboard addSubview:doneButton];
      					[keyboard addSubview:dotButton];
      				}
      			}
      
      
      }
      



      Alors là c'est un copié/collé du code utilisé dans mon app Aires & Volumes, il permet d'ajouter un bouton DONE et un bouton . (point) sur le clavier avec les chiffres.

      Donc on créé deux boutons manuellement, avec les actions associées, leurs images, leurs tailles, etc.
      La partie suivante, avec le //location keyboard view.
      Elle permet d' "analyser" tous les éléments graphiques de la fenêtre, si l'élément a un nom qui commence par "<UIKeyboard" c'est le clavier, on peut donc y ajouter les deux boutons.

      Donc ce n'est pas exactement ce qui tu demandes, mais je pense que c'est une piste.

      Tu peux par exemple faire une while pour passer en revue chaque bouton du clavier, et faire un [bouton enabled] = False.

      Bonne chance!
      • Partager sur Facebook
      • Partager sur Twitter
        23 février 2012 à 20:50:22

        Salut,
        sinon tu peux placer toi même des boutons (un pour chaque lettre) qui se cachent lorsqu'ils sont pressés.
        • Partager sur Facebook
        • Partager sur Twitter
          24 février 2012 à 11:58:12

          Merci à vous pour vos réponses, merci pour le code aussi !
          C'est à peu près ce que j'imaginais, il va falloir être plus malin qu'un bête passage via l'Interface Builder...
          Mais comme il se trouve que j'ai déjà codé un pendu similaire en Java, avec création d'un clavier graphique, j'aurai pas trop de mal à transformer mon code en Obj-C je pense...
          Merci encore en tout cas ! Je vais m'occuper de ça très vite :p
          • Partager sur Facebook
          • Partager sur Twitter
            24 février 2012 à 15:18:29

            Tiens nous au courant quand l'app sera dispo ;)
            • Partager sur Facebook
            • Partager sur Twitter
              4 mars 2012 à 10:55:40

              Merci pour ces infos ! Je les trouve très intéressantes, j’ai essayé pas mal de fois de créer une app et je me trouve bloquer a chaque moment et parmi mes obstacles ce fameux clavier merci c’est très encourageant et bonne chance à UiYuki :)
              • Partager sur Facebook
              • Partager sur Twitter
                18 mars 2012 à 3:18:25

                Bon finalement j'ai rusé, j'ai utilisé un UIPickerView que je trouve plus commode... mais chut :p
                • Partager sur Facebook
                • Partager sur Twitter
                  19 mars 2012 à 11:19:09

                  Bonjour,

                  Tu peux donc indiquer ton sujet comme "Résolu"

                  Bonne journée
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [iPhone] Créer un clavier spécial ?

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown