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 código siguiente
var cell:CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier("CustomTableViewCell") as CustomTableViewCell
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
}