7
votes

UIViewController - ne peut pas devenir le premier répondeur

Quelqu'un sait pourquoi UIViewController ne deviendrait pas le premier répondeur lorsque j'exécute ce code:

- (BOOL)canBecomeFirstResponder {
return YES;
}


5 commentaires

Je n'ai jamais utilisé devenue devenue dans un UIViewController et je ne peux pas comprendre pourquoi vous auriez besoin de. Cela ne répond pas à la saisie de l'utilisateur, il est toutefois des vues d'enfants.


Un objet répondeur ne devient que le premier répondant si le répondeur actuel peut démissionner le statut du premier répondeur (CanresignfirSponder) et le nouveau répondeur peut devenir le premier répondeur. Qui est le premier répondeur actuel?


Puis-je demander pourquoi est-il essentiel que l'UIViewController soit le premier répondant?


Nick - Je veux détecter des tremblements (avec une méthode motivée qui est envoyée au premier répondant uniquement) Oxigen - Je n'ai pas vérifié cela, je le ferai. Corey - Comme je l'ai dit à Nick, j'ai besoin de recevoir un message motivé quelque part, et puisque j'ai choisi Uiviewontroller, j'en ai besoin pour être le premier répondeur pour cela


La fonctionnalité des annulations semble exiger que la VC devienne également le premier répondant. Au moins, c'est comme ça que je le lis et que je l'ai eu pour travailler.


3 Réponses :


4
votes

Avez-vous un UIscrollView dans cette UIViewController?


2 commentaires

Je crois que UiscrollView prend votre statut de main-de-mange car il souhaite obtenir le robinet avant qu'il ne soit passé. Cependant, à toutes fins utiles, je pense que vous allez bien, car le mécanisme de détection de secoueur passera par l'UISCrollView à votre contrôleur d'affichage s'il doit.


C'est le point - je ne peux pas détecter les shakes nulle part dans le code. J'ai commencé à creuser et j'ai constaté que VC ne devient pas le premier répondant



5
votes

Mise à jour

Comme je le soupçonné, j'ai supposé mal à propos de UIViewController / Strapresponder Utilisation. Ce thread dans les forums Apple Dev parle spécifiquement de la secouette au travail.

Réponse originale

appel devisesfirstreponder sur l'élément UI que vous souhaitez répondre. Les événements seront automatiquement transférés au uiviewcontroller tant qu'aucun autre objet de la chaîne implique les méthodes touchées (ou continuez au moins de les transmettre à la chaîne).

Note latérale: Pour construire sur les commentaires des autres, il n'a pas vraiment de sens pour un uiviewcontroller pour être le "premier" répondeur. Le premier répondeur doit être un objet avec une représentation à l'écran (un uiview ou l'une de ses sous-classes).

Bien que cela puisse être une déclaration complètement incorrecte, il peut y avoir un comportement non documenté dans uiviewcontroller qui l'empêche de devenir le facilitail manifeste en raison de ces problèmes (quelqu'un plus intelligent que moi pourra vérifier la validité de la validité de Ceci).


5 commentaires

Je suis d'accord avec vous, mais comment voudriez-vous ajouter une fonctionnalité de détection de secousse? Je peux avoir la méthode dans l'une des sous-classes UIVIEW, mais comment puis-je vous garantir que je détecterai toujours des shakes à moins que la méthode est dans la classe la plus parentale?


Bon point, j'ai mis à jour ma réponse avec quelques informations que j'ai trouvées dans les forums de développement


Corey, ça a fonctionné. La clé était de rendre le premier répondeur de VC à ViewDidAppear.


Maintenant, je ne peux que détecter les shakes sur le démarrage. J'ai eu Uiscrollview avec le groupe d'uiviews imbriqués, et il est toujours un défi de les faire détecter les shakes aussi .... :(


Vous devrez peut-être remplacer la motion a commencé / terminé les méthodes dans les sous-espoirs ou au moins dans la vision de ScrollView également et gérez le transfert manuellement. Les événements de passage traversant Uiscrollview ont été délicats, il aime généralement avaler des événements (toucher). Pas sûr des événements de mouvement.



6
votes

Assurez-vous de définir votre UIViewController pour être le premier répondeur après vous avez affecté une affectation de la vue à votre instance de fenêtre.


1 commentaires

Pépite d'informations utiles ci-dessus! Appeler [auto-résigneur-dépression] sur mon contrôleur d'affichage échoue parce que j'avais déjà retiré sa vue de l'écran