Quiero usar un UITableview con diferentes tableViewCells personalizados. Mis 3 celdas son como tales:
- Cell1: debe tener una imagen y una etiqueta.
- Cell2: debe tener dos etiquetas.
- Cell3: debería tener un dayPicker.
No quiero codificar una etiqueta para las celdas. ¿Cómo puedo gestionar esto en Swift? ¿Tengo que codificar mi propia clase para cada celda? ¿Puedo usar un controlador de vista de tabla? ¿Cómo puedo completar datos en diferentes celdas?
Me gustaría generar un tableView, como una aplicación de contacto de un dispositivo iOS.
swift
uitableview
Easyglider
fuente
fuente
Respuestas:
Permítanme comenzar respondiendo sus preguntas primero.
¿Tengo que codificar una clase propia para cada celda? => Sí, eso creo. Al menos, lo haría de esa manera.
¿Puedo usar un tableviewController? => Sí, puedes. Sin embargo, también puede tener una vista de tabla dentro de su controlador de vista.
¿Cómo puedo completar datos en diferentes celdas? => Dependiendo de las condiciones, puede completar datos en diferentes celdas. Por ejemplo, supongamos que desea que sus dos primeras filas sean como el primer tipo de celdas. Por lo tanto, solo crea / reutiliza el primer tipo de celdas y establece sus datos. Será más claro, cuando les muestre las capturas de pantalla, supongo.
Permítame darle un ejemplo con un TableView dentro de un ViewController. Una vez que comprenda el concepto principal, puede intentar modificarlo de la forma que desee.
Paso 1: Cree 3 TableViewCells personalizadas. Lo nombré FirstCustomTableViewCell, SecondCustomTableViewCell, ThirdCustomTableViewCell. Debería utilizar nombres más significativos.
Paso 2: Vaya al Main.storyboard y arrastre y suelte un TableView dentro de su View Controller. Ahora, seleccione la vista de tabla y vaya al inspector de identidad. Establezca las "Celdas prototipo" en 3. Aquí, acaba de decirle a TableView que puede tener 3 tipos diferentes de celdas.
Paso 3: Ahora, seleccione la primera celda en su TableView y en el inspector de identidad, coloque "FirstCustomTableViewCell" en el campo Clase personalizada y luego establezca el identificador como "firstCustomCell" en el inspector de atributos.
Haga lo mismo para todos los demás: establezca sus clases personalizadas como "SecondCustomTableViewCell" y "ThirdCustomTableViewCell" respectivamente. También configure los identificadores como secondCustomCell y thirdCustomCell consecutivamente.
Paso 4: Edite las clases de celdas personalizadas y agregue salidas de acuerdo con sus necesidades. Lo edité según tu pregunta.
PD: Necesitas poner los puntos de venta bajo la definición de clase.
Entonces, en FirstCustomTableViewCell.swift, bajo el
pondría su etiqueta e imagen en los puntos de venta.
y en SecondCustomTableViewCell.swift, agregue las dos etiquetas como-
y ThirdCustomTableViewCell.swift debería verse como-
Paso 5: En su ViewController, cree un Outlet para su TableView y configure la conexión desde el guión gráfico. Además, debe agregar UITableViewDelegate y UITableViewDataSource en la definición de clase como lista de protocolos. Entonces, la definición de su clase debería verse así:
Después de eso, adjunte UITableViewDelegate y UITableViewDatasource de su vista de tabla a su controlador. En este punto, su viewController.swift debería verse como-
PD: Si tuviera que usar un TableViewController en lugar de un TableView dentro de un ViewController, podría haber omitido este paso.
Paso 6: Arrastre y suelte las vistas de imagen y las etiquetas en su celda de acuerdo con la clase Cell. y luego proporcionar conexión a sus puntos de venta desde el guión gráfico.
Paso 7: Ahora, escriba los métodos requeridos de UITableViewDatasource en el controlador de vista.
fuente
Swift 3.0 + actualización con código mínimo
Concepto básico: crear una vista de tabla con prototipos de celdas dinámicas. Asigne un identificador y cree una clase de celda de vista de tabla personalizada para cada prototipo de celda. Inicie y muestre celdas personalizadas en el método de delegado de la vista de tabla.
1. Crea celdas en el guión gráfico
Arrastre una vista de tabla a su controlador de vista, agregue celdas prototipo y luego suelte el elemento de la interfaz de usuario en las celdas de la vista de tabla, agregue la restricción correctamente si es necesario.
2. Crea
UITableViewCell
clases personalizadasAgregue el siguiente código a su proyecto. Lo estoy poniendo justo encima de la clase de controlador de vista.
3. Asignar un identificador y una clase personalizados a los prototipos de células
Para cada uno de los prototipos de celda en el guión gráfico, asigne la clase personalizada creada en el paso 2 y luego ingrese un identificador único.
4. Conecte los elementos de la interfaz de usuario al código rápido
Control, arrastre la vista de tabla y conéctese a la clase de controlador de vista. Control, arrastre los elementos de la interfaz de usuario que se agregan a los prototipos de celda en el paso 1 y conéctese a la clase de celda de vista de tabla correspondiente.
5. Agregue código para ver el controlador y controlar la vista de la tabla
Haga que su controlador de vista se ajuste al delegado de vista de tabla
En
viewDidLoad
, configure el delegado y la fuente de datos de la vista de tabla.Finalmente, agregue dos métodos delegados para controlar su vista de tabla, según el requisito mínimo.
6. Pruébalo :)
fuente
Las respuestas anteriores son las mejores, pero hay TONELADAS de razones para tener este problema. Aquí hay otra posible solución para cualquier persona con este problema:
Mi problema fue que estaba pasando a la clase ViewController y no a la vista del guión gráfico. Así que mi referencia a la celda del guión gráfico no tenía sentido, ya que el guión gráfico no se estaba utilizando.
Estaba haciendo esto:
Y necesitaba hacer algo como esto:
Espero que esto ayude a alguien.
fuente
UITableViewController
está heredandoUIViewController
que ya haUITableviewDataSource
yUITableviewDelegate
asignada en sí mismo.Puede crear una subclase
UITableViewController
o usar unTableView
dentro de suViewController
. Después de eso, debe implementar los métodos requeridos (cellForRowAtIndexPath
and numberOfRowsInSection
) que se declaran en elUITableviewDataSource
.También en el guión gráfico, debe crear prototipos de células con una identificación única.
Hay tipos básicos de celda, con (título, subtítulo, por ejemplo); también puede usarlos si no necesita una configuración especial.
Entonces, para el selector, sí, debe crear su propia celda personalizada. Cree el
UITableViewCell
selector de fecha de celebración de clases personalizado necesario y asegúrese de usar delegado para devolver el resultado deseado a suViewController
.fuente