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
class FirstCustomTableViewCell: UITableViewCell {
pondría su etiqueta e imagen en los puntos de venta.
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var myLabel: UILabel!
y en SecondCustomTableViewCell.swift, agregue las dos etiquetas como-
import UIKit
class SecondCustomTableViewCell: UITableViewCell {
@IBOutlet weak var myLabel_1: UILabel!
@IBOutlet weak var myLabel_2: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
y ThirdCustomTableViewCell.swift debería verse como-
import UIKit
class ThirdCustomTableViewCell: UITableViewCell {
@IBOutlet weak var dayPicker: UIDatePicker!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
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í:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
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-
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
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.
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "firstCustomCell")
//set the data here
return cell
}
else if indexPath.row == 1 {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "secondCustomCell")
//set the data here
return cell
}
else {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "thirdCustomCell")
//set the data here
return cell
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}