¿Cómo puedo externalizar las operaciones de cambio de vista de mi controlador de vista en las aceleraciones?

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

Pregunta

Tengo una clase de controlador de vista. Quiero hacer algunas cosas desde mi punto de vista cuando el acelerómetro detecta el movimiento y llama al acelerómetro: didAccelerate: método en el objeto delegado.

Ese objeto delegado es el problema aquí en mi cerebro. Actualmente, mi cerebro está congelado y no entiendo lo que sería mejor. Déjame saber lo que piensas!

Solución 1) En mi clase de controlador de vista, me adhiero al protocolo UIAccelerometerDelegate e implemento ese acelerómetro: didAccelerate: método. En el método -applicationDidFinishLaunching: de mi clase AppDelegate, configuro ese objeto controlador de vista como el delegado para recibir llamadas de método en las aceleraciones. Creo que eso no es realmente bueno.

Solución 2) Creo un nuevo objeto en blanco llamado AccelerationDelegate, cumplo con el protocolo UIAccelerometerDelegate, implemento ese acelerómetro: didAccelerate: method y en el método -applicationDidFinishLaunching: de mi clase AppDelegate.

¡Pero para la solución 2 mi cerebro se atascó un poco! ¿Cómo puedo acceder a los objetos de vista desde mi controlador de vista dentro de ese objeto?

El problema aquí es que tengo más de un controlador de vista. Utilizo un controlador de barra de pestañas para cambiar entre ellos.

¿Alguna sugerencia sobre cómo podría hacerlo bien?

¿Fue útil?

Solución

Si su aceleración es específica para un controlador de vista, entonces tiene sentido que el controlador de vista reciba la información necesaria para modificar sus propias subvistas. Sin embargo, podría ser mejor configurar su controlador de vista para que sea el delegado cuando aparezca la vista, y establecer el delegado en nulo cuando desaparezca. (Específicamente, - (void) viewWillAppear: y - (void) viewWillDisappear: )

Otros consejos

Estoy de acuerdo en que el segundo método es mejor. ¿Está buscando acceder solo a la vista de pestaña seleccionada actualmente, o solo a una vista específica en su aplicación?

En cualquier caso, lo que haría sería configurar las propiedades de su UITabViewController en su UIApplicationDelegate para que pueda acceder desde el delegado (puede obtener el delegado de la aplicación llamando a [[UIApplication sharedApplication] delegate] ). Por ejemplo:

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

donde firstViewController es una propiedad de su delegado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top