¿Es mejor incrustar un controller de vista o agregar una subvista?

Por ejemplo, si requiriera que una UITableView apareciera debajo de contenido adicional en una vista, sería una práctica recomendada para:

  • agregar una UITableView como subvista, o
  • agregar una vista de contenedor con un UITableViewController ?

Hasta donde yo sé, ambos proporcionarían la misma experiencia de usuario, sin embargo, estoy interesado en saber qué método se consideraría una mejor práctica.

La regla general para iOS, especialmente para el factor de forma iPhone / iPod Touch, es que debe tener un solo controller de visualización en la pantalla en un momento dado. El único caso en que puedo pensar cuando querrías violar esa directriz es cuando tienes una subvista que tiene mucha lógica incorporada, y la subvista debe includese en otras vistas. Por ejemplo, un popover debería tener su propio controller de vista, ya que podría necesitar mostrarse junto con varios otros controlleres de vista.

En su caso, sugeriría simplemente agregar el UITableView como una subvista a less que (1) la vista de tabla tenga mucha lógica que no esté relacionada con la del controller de vista principal, o (2) tendrá que mostrar el misma vista de tabla en otra parte de tu aplicación.

Tienes varias opciones:

  1. Agregue una UITableView y haga que el controller de vista contenga el origen de datos de la vista de tabla y delegue.
  2. Agregue una UITableView y haga otra class en la fuente de datos de la vista de tabla y delegue.
  3. Cree un controller de vista por separado con la tabla y luego agregue el controller de segunda vista como un controller de vista secundaria de 1st.

La elección depende de la split de responsabilidad y el encapsulado apropiados.

Las opciones 2 y 3 permiten la reutilización si alguna vez necesita incrustar la vista de tabla en más de un controller de vista.

No hay una respuesta simple a su pregunta. Todo depende de sus necesidades, sus datos y la estructura de su aplicación.

Prefiero usar un controller de vista de contenedor por los siguientes motivos:

  • Se puede reutilizar en otra parte de la aplicación.
  • Mantiene la responsabilidad única de los objects (el controller de la vista principal se centra en mostrar información sobre el model, y el controller de la vista de la tabla se encarga de mostrar información sobre una relación en el model, por ejemplo).
  • Mantiene los files fuente más pequeños y más fáciles de leer.
  • Más fácil para build testings para.

En definitiva, ambas son soluciones válidas.