uitableviewcontroller uitableviewcell tutorial personalizadas example efecto custom celdas apple ios uitableview swift customization
TABLA PERSONALIZADA

ios - uitableviewcell - UITableView usando Swift



uitableviewcontroller swift 4 (9)

Ahora he podido hacer funcionar UITableViewCell personalizado.

Trabaja en

  • Se ejecuta en Xcode 6 beta 6
  • Se ejecuta en Xcode 6 beta 5

  • iOS es 7.1

Cómo

  • He creado un archivo ".xib" para la celda.
  • Lo copio en el guión gráfico.
  • A través del guión gráfico le doy un identificador.
  • Me aseguro de que sea un hijo secundario de una vista de tabla.

Si lo hace de esta manera, no necesita registrar una clase / punta, etc.

Esta es mi celda personalizada.

import UIKit class TestCell: UITableViewCell { @IBOutlet var titleImageView: UIImageView! @IBOutlet var titleLabel: UILabel! override init(style: UITableViewCellStyle, reuseIdentifier: String!) { super.init(style: style, reuseIdentifier: reuseIdentifier) } override func awakeFromNib() { super.awakeFromNib() // Initialization code } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } }

En su opinión, o donde quiera que extienda "UITableViewDataSource". Asegúrese de que "cell2" sea el mismo que el "Identificador" que le dio a través del guión gráfico.

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { var cell:TestCell = tableView.dequeueReusableCellWithIdentifier("cell2", forIndexPath: indexPath) as TestCell // Example of using the custom elements. cell.titleLabel.text = self.items[indexPath.row] var topImage = UIImage(named: "fv.png") cell.titleImageView.image = topImage return cell }

uitableviewcell

Mi tapcell1.swift

Esta es la vista personalizada de UITableViewCell View

import UIKit class TapCell1: UITableViewCell { @IBOutlet var labelText : UILabel init(style: UITableViewCellStyle, reuseIdentifier: String!) { println("Ente") super.init(style: UITableViewCellStyle.Value1, reuseIdentifier: reuseIdentifier) } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }

Mi ViewController.swift

Su All DataSource y sus delegados están configurados correctamente. Pero mi celda personalizada no se muestra.

import UIKit class NextViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet var label: UILabel @IBOutlet var tableView : UITableView var getvalue = NSString() override func viewDidLoad() { super.viewDidLoad() label.text="HELLO GOLD" println("hello : /(getvalue)") self.tableView.registerClass(TapCell1.self, forCellReuseIdentifier: "Cell") } func tableView(tableView:UITableView!, numberOfRowsInSection section:Int)->Int { return 5 } func numberOfSectionsInTableView(tableView:UITableView!)->Int { return 1 } func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TapCell1 cell.labelText.text="Cell Text" return cell } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

El problema es Mi celda personalizada no se muestra. Por favor, sugiera algo que hice mal.

Nota: aquí está mi código Mi enlace de descarga de archivos


Debes registrar la class para la celda. Para eso cambia esta línea de código a

self.tableView.registerClass(TapCell1.classForCoder(), forCellReuseIdentifier: "Cell")

Editar

Tu código se ve bien lo he comprobado

//cell.labelText.text="Cell Text" cell.textLabel.text="Cell Text" // use like this


Es una notación puramente rápida y un trabajo para mí.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cellIdentifier:String = "CustomFields" var cell:CustomCell? = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? CustomCell if (cell == nil) { var nib:Array = NSBundle.mainBundle().loadNibNamed("CustomCell", owner: self, options: nil) cell = nib[0] as? CustomCell } return cell! }


Finalmente lo hice

Para TapCell1.swift

import UIKit class TapCell1: UITableViewCell { @IBOutlet var labelTitle: UILabel init(style: UITableViewCellStyle, reuseIdentifier: String!) { super.init(style: UITableViewCellStyle.Value1, reuseIdentifier: reuseIdentifier) } }

Para NextViewController.swift

import UIKit class NextViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet var tableView: UITableView var ListArray=NSMutableArray() override func viewDidLoad() { super.viewDidLoad() let nibName = UINib(nibName: "TapCell1", bundle:nil) self.tableView.registerNib(nibName, forCellReuseIdentifier: "Cell") for i in 0...70 { ListArray .addObject("Content: /(i)") } } func tableView(tableView: UITableView!, numberOfRowsInSection section: Int)->Int { return ListArray.count } func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return 51 } func numberOfSectionsInTableView(tableView: UITableView!) -> Int { return 1 } func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TapCell1 //cell.titleLabel.text = "/(ListArray.objectAtIndex(indexPath.item))" cell.labelTitle.text = "/(ListArray.objectAtIndex(indexPath.row))" return cell } }

Mi código de enlace de trabajo: TABLA PERSONALIZADA


Lo más probable es que la solución se encuentre para establecer la altura de la celda manualmente como tal:

override func tableView(tableView:UITableView!, heightForRowAtIndexPath indexPath:NSIndexPath)->CGFloat { return 44 }

Creo que es un error de Xcode beta 6.



Prueba este siguiente código:

var cell = tableView.dequeueReusableCell(withIdentifier: "CustomCellTableView") as? CustomCellTableView


Si no está utilizando Storyboard, cree un nuevo archivo como subclase de UITableViewCell marque la casilla de verificación "crear también archivos xib" después de que establezca su celda personalizada. Y aquí está el código para TableView

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var customcell:CustomTableViewCellClass? = tableView.dequeueReusableCellWithIdentifier("cell") as? CustomTableViewCellClass if (customcell==nil) { var nib:NSArray=NSBundle.mainBundle().loadNibNamed("CustomTableViewCellClass", owner: self, options: nil) customcell = nib.objectAtIndex(0) as? CustomTableViewCell } return customcell! }


Verifique su Tablero de la historia, seleccione la celda y vea el "inspector de identidad" en ese tipo de CLASE seleccione su Clase personalizada y el MÓDULO escriba el nombre de su proyecto

He hecho esto. Funciona perfectamente. Pruebe este consejo para evitar errores y ver la imagen y el código a continuación.

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? { // let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil) // cell.textLabel.text = array[indexPath!.row] as String let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomTableViewCell cell.nameLabel.text = array[indexPath!.row] as String cell.RestaurentView.image = UIImage(named:images[indexPath!.row]) return cell }