uitableviewcell register custom iphone ios uitableview xib reusability

iphone - custom - swift register nib



Un archivo xib con mĂșltiples "propietarios de archivos" s (3)

El propietario de un archivo de plumilla no se aplica estrictamente. En su lugar, solo se utiliza para determinar las salidas y acciones disponibles, y para establecer enlaces dentro de Interface Builder. Puede cargar una punta con cualquier objeto como el propietario de su archivo, independientemente de la clase establecida en el archivo de punta. Cuando se carga una pluma, enviará mensajes al propietario del archivo para restablecer los enlaces. Si el objeto Propietario del archivo real no reconoce esos selectores, habrá activado una excepción de "selector no reconocido". Esto significa que si su punta une algunos UITableViewCell a la salida de "celda" de su Propietario de archivo, cualquier objeto con una propiedad de "celda" podría cargar esa punta. Solo debe tener cuidado de no usar este comportamiento para enviar un selector no reconocido o una clase de salida inesperada.

En su caso, considere crear una única subclase UIViewController para que actúe como el propietario del archivo de su plumilla. Haga que cada uno de sus tres controladores existentes extienda esa subclase de controlador de vista. De esa manera, todos pueden heredar el mismo conjunto de propiedades esperado por el archivo de plumilla y todas pueden cargar esa plumilla de forma segura mientras aún definen su propio comportamiento personalizado.

Tengo tres UITableViews diferentes, cada una en su propia vista, a la que se accede mediante pestañas. Las tres tablas compartirían idealmente la misma clase personalizada de UITableViewCell y el archivo .xib.

Comencé con una tabla, configurando la clase de .xib en mi clase personalizada y el Propietario del archivo de .xib en el UIViewController principal de la tabla, que funciona muy bien. Todo el código relacionado con la vista personalizada se encuentra en la clase de la celda (imágenes de fondo basadas en una propiedad establecida por el controlador, altura de celda personalizada según el número de líneas que requiere una etiqueta basada en una propiedad de la celda establecida por el controlador, etc.) .

El resultado es bueno: la celda es responsable de todo el diseño visual y responde a las acciones del usuario en los controles de la celda, mientras que el controlador de la vista es responsable de crear las celdas y configurar sus datos.

Sin embargo, ahora que necesito reutilizar la celda en otras tablas, el hecho de que el .xib de la celda personalizada tenga un único propietario de archivo es un problema. En lugar de duplicar el archivo .xib, ¿existe una forma sencilla de permitir que varios controladores lo posean?


La respuesta verificada a esta pregunta analiza dos enfoques para cargar celdas de tablas personalizadas desde archivos de plumillas que no requieren configurar el Propietario del archivo a su controlador específico. Estos enfoques le permiten reutilizar las células con diferentes propietarios.


Una súper clase "compartida" como propietario de un archivo no siempre es una buena solución. Recuerde que siempre puede cargar el xib en su vista y hacer conexiones sin usar un tomacorriente, por ejemplo:

UIView *aView = [[NSBundle mainBundle] loadNibNamed:@"MyXibFile" owner:self options:nil] //Search subviews by tag. Obviously you need to set the tag on your view in MyXibFile UILabel *aLabel = (UILabel*)[aView viewWithTag:996]; UILabel *aTextField = (UITextField*)[aView viewWithTag:997]; aTextField.delegate = self; //etc...

No puedo decir que esta es una solución limpia, pero en algunos casos podría funcionar mejor que la herencia.