Comment puis-je externaliser des opérations de changement de vue de mon contrôleur de vue lors d'accélérations?

StackOverflow https://stackoverflow.com/questions/826933

Question

J'ai une classe de contrôleur de vue. Je souhaite faire quelque chose à mon avis lorsque l'accéléromètre détecte un mouvement et appelle la méthode Accéléromètre: didAccelerate: dans l'objet délégué.

Cet objet délégué est le problème ici dans mon cerveau. Actuellement, mon cerveau est gelé et je ne comprends pas ce qui serait mieux. Faites-moi savoir ce que vous pensez!

Solution 1) Dans ma classe de contrôleur, je me conforme au protocole UIAccelerometerDelegate et implémente cette méthode d'accéléromètre: didAccelerate:. Dans la méthode -applicationDidFinishLaunching: de ma classe AppDelegate, je configure cet objet de contrôleur de vue en tant que délégué pour la réception d'appels de méthode lors d'accélérations. Je pense que ce n'est pas vraiment bon.

Solution 2) Je crée un nouvel objet vierge appelé AccelerationDelegate, conforme à ce protocole UIAccelerometerDelegate, implémente cette méthode accelerometer: didAccelerate: et dans la méthode -applicationDidFinishLaunching: de ma classe AppDelegate, en définissant cet objet de contrôleur de vue comme délégué pour la réception d'appels de méthode lors d'accélérations.

Mais pour la solution 2, mon cerveau s'est un peu coincé! Comment accéder aux objets vue à partir de mon contrôleur de vue à l'intérieur de cet objet?

Le problème ici est que j'ai plusieurs contrôleurs de vue. J'utilise un contrôleur de barre d'onglets pour basculer entre eux.

Avez-vous des suggestions pour réussir?

Était-ce utile?

La solution

Si votre accélération est spécifique à un contrôleur de vue, il est logique de lui demander de recevoir les informations nécessaires pour modifier ses propres sous-vues. Toutefois, il peut être préférable de définir votre contrôleur de vue comme délégué lorsque la vue apparaît et de définir le délégué sur null lorsqu'il disparaît. (Plus précisément, - (void) viewWillAppear: et - (void) viewWillDisappear: )

Autres conseils

Je conviens que la deuxième méthode est meilleure. Souhaitez-vous accéder uniquement à la vue à onglet actuellement sélectionnée ou à une vue spécifique de votre application?

Dans tous les cas, je voudrais définir des propriétés pour votre UITabViewController dans votre UIApplicationDelegate afin que vous puissiez y accéder à partir du délégué (vous pouvez obtenir le app délégué en appelant [[UIApplication sharedApplication]] [). Par exemple:

YourApplicationDelegate *appDelegate = (YourApplicationDelegate *)[[UIApplication sharedApplication] delegate];
FirstUIViewController *firstViewController = appDelegate.firstViewController;
[firstViewController doStuff];

firstViewController est une propriété de votre délégué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top