[Semi-Résolu] Un problème entre clavier, vue et le mode BackGround

Am_MeAm_Me Membre
mai 2013 modifié dans API UIKit #1

Bonjour a tous desole je n'ai pas trouve un titre assez correcte bon je vous expose tout de meme mon problème  :P


 


Voici mon probleme


 


J'a une vue qui dispose d'une textfield tout en bas , quand je clique dessus un clavier s'affiche et ma vue remonte parfaitement et je n'utilise pas une scroll View car avec une seul textfield je n'en vois pas l'utilite !


 


TOUT marche parfaitement sauf :


Si je laisse le clavier actif c'est a dire que je met mon appli en Background en gros j'appui sur le bouton Home de l'iPHone et que je reviens dessus surprise mon clavier est toujours la MAIS ma vue est revenu a l'etat initiale ..... en gros redescendu ...


 


Je vous ai concocte 4 petites images explicatives


 


Ca c'est ma vue au depart


Mots clés:

Réponses

  • AliGatorAliGator Membre, Modérateur

    Quand tu passes ton appli en background, je suppose que le TextField perd le focus et donc que textFieldDidEndEditing est appelé. Ce qui explique pourquoi ton textfield redescend...


  • Am_MeAm_Me Membre

    Bah j'ai mis un breakpoint sur 


     


    - (void)textFieldDidEndEditing:(UITextField *)textField


    {


        [self animateTextField: textField up: NO];


    }


     


    mais quand je met en background l'appli ou meme quand je reviens dedans cette fonction n'est pas appelee


     


    Ou j'ai tres mal compris ta reponse


  • j'avais le même problème que toi mais avec des boutons que je voulais remonter.


     


    Au départ ça marchait bien mais quand je changé de TextField et bien tout redescendais


     


    Au final ===>>> ScrollView et ça marche nikel, j'ai pas cherché plus loin ???


  • il faudrait que tu inscrives au démarrage de ta vue les abonnements au clavier


     


    ce tuto l'explique assez bien : http://franckchevallier.com/2012/02/29/uitextfield-masque-par-le-clavier/


     


    car il faut que tu joue avec l'origine de ta vue, la remonte et la redescende à  chaque apparition ou disparition du clavier


  • Am_MeAm_Me Membre


    il faudrait que tu inscrives au démarrage de ta vue les abonnements au clavier


     


    ce tuto l'explique assez bien : http://franckchevallier.com/2012/02/29/uitextfield-masque-par-le-clavier/


     


    car il faut que tu joue avec l'origine de ta vue, la remonte et la redescende à  chaque apparition ou disparition du clavier




     


     


     


    Ok je vais faire un tour dessus merci


    Je vous donnerai des nouvelle d'ici la

  • Am_MeAm_Me Membre
    mai 2013 modifié #7

    Merci ca marche un peu mieux mais il y a toujours un probleme si j'appui sur la textfield ca m'affiche le clavier rien de magique mais ca ne remonte la textfield que si je commence a saisir


     


    MAJ : Sans compter que ma vue est plus grande que l'iphone 4 et que je suis oblige de scroller pour voir le bas de mon appli mais ca je verrai


     


    En plus probleme quand je switch de vue et que je reviens j'ai la malheureuse suprise de trouve ma vue decale un peu vers le haut .


  • si tu utiliserais la scrollView et dans le lien que je t'ai passé, il utilise ce code là 



    [self.scrollView scrollRectToVisible:textFieldRect animated:YES];

    Maintenant si tu veux toujours pas de ScrollView, tu dois récupérer l'origine de ton TextField


     


    et faire (si ton origine est en haut à  gauche)


     


    nouvelleOrigineVue.y = tailleVue.hauteur - origineTextfield.y    //La tu remontes ta vue de la hauteur de ton clavier


     


    Quand tu changes ta vue à  ton -(void) viewUnLoad() (ou équivalent) et quand tu ajoute une autre vue aussi replace l'origine de ta vue à  0


     


    Mais ça va vite devenir une machine à  gaz sans ScrollView ??? du moins de mon point de vue personnel


  • Am_MeAm_Me Membre

    Ouep mais ca ne marchais pas tres bien en plus avec l'ecran iphone 4 et 5 c'est pas la meilleur solution.


    J'aimerai recuperer ma textField dams le AppDelegate et faire genre un 



    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
        [[HomeViewController sharedTextField] resignFirstResponder ];
    }

    Possible ou pas ?

  • Am_MeAm_Me Membre

    Ou tous simplement faire un refresh de la vue courante possible ?


Connectez-vous ou Inscrivez-vous pour répondre.