Skip to content
Menu
CDhistory
CDhistory

Guiones gráficos, XIBs y código

Posted on septiembre 6, 2021 by admin
Recursos
Descarga tu copia gratuita de
El manual que falta
para el desarrollo de Swift

La guía que desearía haber tenido cuando empecé

Únete a más de 20,000+ Desarrolladores que aprenden sobre el desarrollo Swift

Descarga tu copia gratuita

El proyecto Photos utiliza exclusivamente storyboards para diseñar y crear controladores de vista. En este episodio, te muestro que el patrón coordinador no se limita a los storyboards. También puedes utilizar el patrón coordinador si prefieres los archivos XIB en lugar de los storyboards. Si prefieres no usar ninguno de los dos, también es posible. No importa cómo diseñes y crees los controladores de vista de tu proyecto.

  • Proyecto de inicio
  • Tarjetas de historia
  • XIBs
  • Código
  • ¿Qué sigue?

Proyecto de inicio

El proyecto de inicio de este episodio es funcionalmente idéntico al proyecto terminado del episodio anterior. Sin embargo, hay algunas diferencias que quiero señalar. La clase TermsViewController ya no se ajusta al protocolo Storyboardable y ahora tiene tres subclases, TermsViewControllerStoryboard, TermsViewControllerXIB y TermsViewControllerCode.

La clase TermsViewControllerStoryboard es idéntica a la clase TermsViewController del episodio anterior. La interfaz de usuario de la clase TermsViewControllerStoryboard se define en Main.storyboard. Podemos instanciar una instancia de la clase invocando el método instantiate() del protocolo Storyboardable.

La interfaz de usuario de la clase TermsViewControllerXIB se define en TermsViewControllerXIB.xib. La clase TermsViewControllerXIB define una propiedad estática y variable, nibName, para evitar el uso de literales de cadena. Esto es similar a la propiedad storyboardIdentifier definida en Storyboardable.swift.

Como su nombre indica, la clase TermsViewControllerCode no tiene un enlace a un storyboard o un archivo XIB. La interfaz de usuario se crea en el código. Esto obviamente resulta en un poco más de código. Echemos un vistazo a cada uno de estos controladores de vista y exploremos cómo encajan en el patrón de coordinador.

Tarjetas de historia

Las tablas de historia han existido durante varios años y Apple anima a los desarrolladores a usarlas. Yo uso storyboards en la mayoría de los proyectos en los que trabajo. Xcode crea automáticamente un guión gráfico cuando se crea un nuevo proyecto, pero recomiendo encarecidamente utilizar varios guiones gráficos más pequeños en lugar de un gran guión gráfico. Al usar varios storyboards más pequeños, puedes evitar conflictos de fusión más fácilmente y trabajar con storyboards más pequeños es más rápido y menos complejo.

Los segues son una característica clave de los storyboards, pero nunca los uso en combinación con el patrón de coordinador. Si bien es posible utilizar segues en combinación con el patrón coordinador, un segue involucra al controlador de la vista en el flujo de la aplicación y eso es algo que queremos evitar. Recuerda que los coordinadores del proyecto manejan el flujo de la aplicación. Un controlador de vista no necesita saber nada sobre el flujo de la aplicación y no necesita saber sobre otros controladores de vista.

Incluso sin segues, los storyboards tienen su valor. Yo siempre divido los proyectos medianos y grandes en módulos. Cada módulo tiene un storyboard, que contiene los controladores de vista del módulo.

Abre TermsCoordinator.swift y navega hasta el método showTerms(). La implementación es idéntica a la del proyecto terminado del episodio anterior. La única diferencia es el nombre de la clase del controlador de vista. El coordinador de términos instancia la clase TermsViewControllerStoryboard en lugar de la clase TermsViewController.

// MARK: - Helper Methodsprivate func showTerms() { // Initialize Terms View Controller let termsViewController = TermsViewControllerStoryboard.instantiate() // Install Handlers termsViewController.didCancel = { in self?.finish() } // Present Terms View Controller presentingViewController.present(termsViewController, animated: true)}

XIBs

Los archivos XIB han existido desde los primeros días del desarrollo de Cocoa. Carecen de algunas características en comparación con los storyboards, pero todavía tienen su valor. Yo uso principalmente XIBs para componentes reutilizables, tales como celdas de vista de tabla y celdas de vista de colección.

Abrir TermsViewControllerXIB.xib. La interfaz de usuario de la clase TermsViewControllerXIB es idéntica a la de la clase TermsViewControllerStoryboard en Main.storyboard. Abra TermsCoordinator.swift y revise el método showTerms(). Para crear una instancia de la clase TermsViewControllerXIB, invocamos el inicializador init(nibName:bundle:), pasando el nombre del archivo XIB y una referencia al bundle que contiene el archivo XIB.

// MARK: - Helper Methodsprivate func showTerms() { // Initialize Terms View Controller let termsViewController = TermsViewControllerXIB(nibName: TermsViewControllerXIB.nibName, bundle: .main) // Install Handlers termsViewController.didCancel = { in self?.finish() } // Present Terms View Controller presentingViewController.present(termsViewController, animated: true)}

Código

También es posible crear la interfaz de usuario de los controladores de vista del proyecto en código. Si no te gustan los storyboards o los archivos XIB, esta es tu única opción. No he utilizado mucho esta opción desde la introducción de los storyboards, pero puede ser útil de vez en cuando.

Crear e inicializar un controlador de vista en código es útil si ese controlador de vista tiene una interfaz de usuario compleja o dinámica. Crear e inicializar los controladores de vista en el código tiene otro beneficio convincente. Permite la inyección de inicializadores, una forma de inyección de dependencias. Discutiré la inyección de dependencia en el próximo episodio.

Para crear una instancia de la clase TermsViewControllerCode, invocamos el inicializador init(). Esto es equivalente a invocar el inicializador init(nibName:bundle:) y pasar nil para ambos argumentos.

// MARK: - Helper Methodsprivate func showTerms() { // Initialize Terms View Controller let termsViewController = TermsViewControllerCode() // Install Handlers termsViewController.didCancel = { in self?.finish() } // Present Terms View Controller presentingViewController.present(termsViewController, animated: true)}

¿Qué sigue?

El patrón coordinador es un patrón flexible. No importa si usas storyboards, archivos XIB, o ninguno de los dos. Puedes usar segues, pero recuerda que estás violando un principio fundamental del patrón coordinador si lo haces. Un controlador de vista no necesita saber sobre el flujo de la aplicación y no debería saber sobre otros controladores de vista.

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Entradas recientes

  • Acela está de vuelta: NYC o Boston por 99 dólares
  • Entrada OMIM – # 608363 – SÍNDROME DE DUPLICACIÓN DEL CROMOSOMA 22q11.2
  • Los padres de Kate Albrecht – Conoce más sobre su padre Chris Albrecht y su madre Annie Albrecht
  • Temple Fork Outfitters
  • Burr (novela)

Archivos

  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • junio 2021
  • mayo 2021
  • abril 2021
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語
©2022 CDhistory | Powered by WordPress & Superb Themes