2009-04-02 18 views
5

Como alguien que es bastante nuevo en el desarrollo de iPhone, he estado tratando de encontrar buenos patrones de diseño para administrar varias subvistas, específicamente donde las subvistas necesitan el mismo tipo de métodos de delegado para definirse.¿Cuál es la mejor manera de organizar múltiples subvistas?

Por ejemplo, tengo una vista en la que necesito cambiar entre 2 UITableViews en función de las acciones del usuario. Ambas UITableViews necesitan un objeto UITableViewControllerDelegate definido para poblar las filas, etc.

¿Los desarrolladores de iPhone más experimentados encuentran que sobrecargar el controlador de vista principal como el delegado para ambas subvistas es la forma correcta de hacer las cosas? Actualmente tengo 2 objetos definidos que cada uno actúa como un delegado para cada UITableView para tratar de mantener las cosas más organizadas. Logra lo que necesito, pero ¿es este un buen patrón a seguir?

Supongo que hay algunas mejores prácticas para evitar varios inconvenientes con la gestión de memoria y cosas divertidas como esa. ¡Gracias por adelantado!

Respuesta

5

Puede usar vistas como contenedores para contener elementos como tablas. Por lo tanto, en el caso que delinee, tendrá una vista de contenedor e intercambiará UITableViews dentro y fuera de él ...

Un buen enfoque sería tener controladores de vista separados para cada tabla. De lo contrario, se vuelve demasiado desordenado tratando de hacer un seguimiento de qué conjunto de datos está soportando a través de los diversos métodos delegados de vista de tabla, y hace más difícil hacer muchas personalizaciones en una tabla que pueden no aplicarse a otra.

Lo más importante a tener en cuenta cuando se utilizan controladores de vista compuestos es el "self.navigationController" y las llamadas relacionadas no devolverán nada (ya que no son realmente elementos secundarios de su controlador de navegación) por lo que tendrá que transmitir esa referencia o de otra manera manejar eso de manera algo diferente en los controladores de vista de tabla.

1

Así es como yo manejaría la situación yo mismo. Un controlador y delegado por UITableView. El origen de datos se puede reutilizar, si tiene sentido (es decir, se muestran los mismos datos en ambos UITableViews) De lo contrario, tendría muchos ifs en sus métodos de delegado, verificando qué tabla de ver enviar el mensaje.

Alternar UITableViews me parece un trabajo para UINavigationController. Usualmente en el iphone, no solo reorganizas tus controles. Usted crea pantallas completas (en código o como .nib a través de InterfaceBuilder), alternando entre ellas usando UINavigationController o una UITabBar.

2

Si solo hubiera una pequeña diferencia entre los dos, por ejemplo, si las celdas de la tabla se configuran de la misma manera pero usan datos ligeramente diferentes -podría usar sentencias if, de lo contrario iría con objetos delegados separados de algún tipo. La separación de preocupaciones es la clave aquí: si está escribiendo un método que hace dos cosas muy diferentes, eso es una señal de que su código no está lo suficientemente organizado como para ser legible, fácil de mantener o flexible.

Además, no se olvide que los controladores de vista no lo hacen tienen que ser objetos mágicos que sólo se puede utilizar con los controladores de la barra de pestañas de navegación y aprobados por Apple. Es perfectamente legítimo escribir su propio "controlador de vista de conmutación" que toma dos controladores de visualización y conmuta entre ellos. Sin embargo, tendrá que hacer algunas pruebas para determinar si necesita llamar a "visualización de aparición rápida: y su estilo de forma manual o no"; hay alguna maquinaria mágica que puede o no puede hacerlo por usted, dependiendo de dónde agregue su controlador de vista. en la jerarquía

Cuestiones relacionadas