7
votes

Supprimer le clavier à partir de l'écran sans appeler Resignfiresponder

J'ai une vue personnalisée ( notifierview ) ajouté sur uiwindow avec un bouton de licenciement (qui retirez-le de uiwindow ). Cette vue est ajoutée lorsqu'une notification push est livrée dans Didreceiveremotenotification Il y a plusieurs cas lorsque je pouvais être sur n'importe quel écran et mon clavier est up via uitextfield / uitextview . A ce stade si une poussée vient, le notifyview est ajouté sur uiwindow derrière le clavier. Je veux démissionner du clavier une fois que la poussée est reçue pour que je puisse:

  • Publier une notification avec NSNOTIFICACENTCENTER Pour résilier tous les fichiers Textfields / TextViews (si quelqu'un est Strapresponder ). Pour cela, je dois conserver un pointeur actif sur le champ de texte / TextView actuellement actif dans tous les contrôleurs.

  • Créez une variable dans APPDelegate et attribuez les fichiers texte actifs / Views à celui-ci et sur PUSH et DÉNIGNFIRSPRESPELER de ceux qui se trouvent.

    Les deux solutions nécessiteraient de modifier tout le code du contrôleur et je cherche quelque chose de plus générique comme:

    • pourrait-il y avoir quelque chose à travers lequel je pourrais simplement supprimer le clavier de l'écran sur la réception de poussée
    • ou je pourrais récupérer le feutre actuel de la demande et le démissionner explicitement.

      Celles-ci pourraient être des solutions génériques.

      Ce serait vraiment utile si quelqu'un pourrait faciliter ce processus de pensée ou une autre solution immédiate à cette affaire.


1 commentaires

Dupliquer ? Stackoverflow.com/questions/1823317/...


4 Réponses :


4
votes

Essayez celui-ci, pour moi ça marche bien [Vue d'envoi Enddition: Oui]


2 commentaires

Je cherche une autre étape générique que pour cela, j'ai maintenu une trace de ma vue actuelle pour l'appeler.


Appelé à cette méthode appellera en réalité démignfiresponder s'il y a Uitextfield dans la vue. développeur.apple.com/reference/uikit/uiview/1619630- Expédiement g < / a>



0
votes

Le problème c'est, quand vous voulez rendre la mise au point.

J'ai mis en œuvre comme écoutant chaque champ de texte et la mise en cache qui est la dernière. Que de démissionner que celui-là (en poussée) après cet état de restauration, nécessitez la mise au point de cela.


0 commentaires

7
votes

Vous pouvez utiliser la méthode ci-dessous

[[[UIApplication sharedApplication] keyWindow] endEditing:YES]


0 commentaires

0
votes

Essayez ceci dans la méthode de délégué ...

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
  [self.view endEditing:YES]; // added this in for case when keyboard was already on screen
  [self editStartDate:textField];
  return NO;
}


0 commentaires