2017-09-09 5 views
3

Mon application iOS rapide a un champ de texte actif avec affichage du clavier. utilisateur Everytime tape la touche de retour sur le clavier, j'appelleBoutons SKStoreReviewController cachés sous le clavier

SKStoreReviewController.requestReview() 

Cela peut sembler excessif, mais une fois que l'utilisateur a donné l'examen, énoncé ci-dessus ne rien faire, donc je pense que mon approche est correcte.

Problème: sur les périphériques à écran plus petit (iPhone 5, etc.), les boutons du SKStoreReviewController affichés sont masqués sous le clavier. Ainsi, l'utilisateur reste bloqué car il ne peut pas fermer le SKStoreReviewController. Je ne souhaite pas ajouter de bouton de masquage de clavier pour l'utilisateur.

Comment puis-je savoir quand SKStoreReviewController s'est affiché afin que je puisse masquer le clavier par programmation?

Répondre

1

Vous n'avez aucun moyen de savoir si elle est affichée.

Vous pouvez lire la documentation sur SKStoreReviewControllerhere, qui affiche uniquement la fonction requestReview() que vous utilisez pour l'appeler. Mais, si vous voulez creuser plus profond, je fournis la capture d'écran suivante qui montre à quoi ressemble la Debug View Hierarchy lors de l'affichage de la requête.

enter image description here

Qu'est-ce que cela vous dit, est qu'il n'y a rien que vous pouvez essayer de creuser à travers des propriétés telles que presentedViewController pour tenter de deviner si l'écran est présenté.

Normalement, si vous présentez un UIAlertController, ou n'importe quel élément de l'interface utilisateur, vous verrez les éléments de l'interface utilisateur empilés ensemble, ce qui indique que vous pouvez accéder aux propriétés associées pour découvrir ce qui est présenté. Avec cette classe, rien de tout cela n'est fourni, donc votre application est inconsciente de ce qui se passe.

La capture d'écran ci-dessous illustre ce qu'est une hiérarchie de vue ressemble lorsque vous avez plusieurs éléments sur l'écran:

enter image description here

comme Apple fait allusion dans la documentation de la classe, vous devez développer votre propre logique pour la présentation à un moment où il ne présentera pas le problème que vous rencontrez actuellement.

+0

Merci pour la réponse détaillée – Kashif

0

Je viens de répondre à cette question ici:

Mechanism to detect display of iOS 10.3 app rating dialog?

Vous pouvez configurer votre champ de texte pour masquer le clavier lorsque la vue de notation est affichée et activer à nouveau le clavier lorsque la vue de notation est rejetée:

- (void)windowDidBecomeVisibleNotification:(NSNotification *)notification 
{ 
    if([notification.object class] == [MonitorObject class]) 
    { 
     NSLog(@"Review Window shown"); 
     [self.enterCodeView resignFirstResponder]; 
    } 
} 

- (void)windowDidBecomeHiddenNotification:(NSNotification *)notification 
{ 
    if([notification.object class] == [MonitorObject class]) 
    { 
     NSLog(@"Review Window hidden!"); 
     [self.enterCodeView becomeFirstResponder]; 
    } 
}