Swift Custom UITableViewCell不显示数组中的数据

时间:2017-01-18 04:15:36

标签: ios swift uitableview xcode7

我是Swift的新手,也是iOS开发的新手。我正在尝试创建自定义UITableViewCell。我在UIViewController内部的UITableView上创建了我的主故事板中的单元格。当我加载一个默认单元格时,我能够用数据填充它。但是,现在我正在使用自定义单元格,我无法在表格中显示任何数据。我已经浏览了互联网上发布的各种教程和问题,但我无法弄清楚它为什么不起作用。任何帮助将不胜感激。

以下是tableview所在的UIViewController的代码。

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet var tableView: UITableView!
var name = ["Thinh", "Nhut", "Truong", "Tuyet", "Hoai", "Hoang", "NSHipster", "iOS Developer Tips", "Jameson Quave", "Natasha The Robot", "Coding Explorer", "That Thing In Swift", "Andrew Bancroft", "iAchieved.it", "Airspeed Velocity"]
var ngaysinh = ["10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991", "10/10/1991"]
var namsinh = ["1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991"]


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return name.count
}

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)


public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell

    cell.hoten.text = name [indexPath.row]
    cell.ngaysinh.text = ngaysinh [indexPath.row]
    cell.namsinh.text = namsinh [indexPath.row]

    return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    let row = indexPath.row
    print(name[row])
    print(ngaysinh[row])
    print(namsinh[row])
}


}

这是CustomCell Class:

import UIKit

class CustomCell: UITableViewCell {

@IBOutlet weak var hoten: UILabel!
@IBOutlet weak var ngaysinh: UILabel!
@IBOutlet weak var namsinh: UILabel!
override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

5 个答案:

答案 0 :(得分:2)

请执行以下操作:

  1. 检查拼写错误的单元格和班级名称
  2. 检查UITableview的委托和数据源是否正确绑定
  3. 如果你使用xib for TableViewCell然后在VDL中注册你的xib
  4. 注意: 1.在此as之间的customCellas! CustomCell之间留一个空格。如果你声明它对iOS更好 像let cell : CustomCell = ..........这样的变量单元格,因为在这种情况下,x-code知道你的变量类型。 [有时它可能不会产生冲突,但它不是编码的良好实践]。

    2.可能会将您的tableview出口名称@IBOutlet var tableView: UITableView!更改为任何其他名称,因为如果您使用相同的变量,tableView已经在iOs采用的构建名称中,那么它会覆盖并导致x-冲突代码。

      

    修改

    而不是self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!CustomCell从行中移除self,因为您没有将tableView对象排队,此处只需要将cellForRow方法的参数出列。

    使用以下代码:

    let cell : CustomCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell
    
      

    解决方案

    使用下面的演示图像来绑定delegatesdatasource storyboard,我在执行此操作后添加了输出,请检查。

    演示图片

    enter image description here

    项目的输出:

    enter image description here

答案 1 :(得分:0)

我想,请在viewDidLoad方法中写一下,然后尝试,

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self
    // Do any additional setup after loading the view.
}

答案 2 :(得分:0)

确保您已设置单元格标识符

enter image description here

答案 3 :(得分:0)

我也遇到过这个问题,上面的内容并没有让我一路走来。我还需要做的是确保我将dataSource和委托出口连接到视图控制器(我的视图控制器类包括UITableViewDelegate和UITableViewDataSource)。检查这一点,以防上述问题无法解决。

答案 4 :(得分:0)

您需要在viewDidLoad中或从Stroyboard中自定义tableView委托和数据源。

override func viewDidLoad() {
  super.viewDidLoad()

  tableView.delegate = self
  tableView.dataSource = self
}