TableView中的空单元格与自定义TableViewCell - Swift

时间:2015-10-19 13:03:55

标签: ios swift

我目前正在以编程方式学习Swift。我想向tableView添加viewController(以便以后能够操纵约束)并使用TableViewCell自定义单元格。

我可以在使用storyboard时关闭我的眼睛,但是当我尝试用直接代码完成时,我有空单元格。

我的故事板由一(1)个空viewController组成,其自定义类为ViewController

我看过其他有类似问题的人,但没有解决方案有效。很想知道我在忽视什么(可能是简单的东西)。在此先感谢您的帮助!

ViewController.swift:

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
var tableView: UITableView = UITableView()
var items: [String] = ["Viper", "X", "Games"]

override func viewDidLoad() {

    tableView.frame = CGRectMake(0, 0, view.frame.size.width, view.frame.size.height)
    tableView.delegate = self
    tableView.dataSource = self

    tableView.registerClass(TableViewCell.self, forCellReuseIdentifier: "cell")

    self.view.addSubview(tableView)
}

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

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return self.items.count
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 3
}

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

    //cell.textLabel?.text = self.items[indexPath.row]
    cell.companyName.text = "name"

    return cell
}

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

TableViewCell:

 import UIKit

class TableViewCell: UITableViewCell {

var companyName = UILabel()

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code

    companyName.frame = CGRectMake(0, 0, 200, 20)

    companyName.translatesAutoresizingMaskIntoConstraints = false

    contentView.addSubview(companyName)
}

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

    // Configure the view for the selected state
}

}

4 个答案:

答案 0 :(得分:4)

你好@Michael首先,你应该只在你使用.xib(Nib)时使用awakeFromNib,而在你的情况下你使用没有这样的xib的自定义类,你应该使用

 override init(style: UITableViewCellStyle, reuseIdentifier: String?){
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    companyName = UILabel(frame: CGRectMake(0, 0, 200, 20))
    contentView.addSubview(companyName)

}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

您也应该在使用之前初始化您的标签。 这将解决您的问题。

阅读Apple的文档,了解UITableViewCell的基类here

答案 1 :(得分:1)

如果您希望自定义单元格从某些自定义xib加载,您有时会喜欢:

tableView.registerNib(UINib(nibName: "CustomTableViewCell", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: "CustomTableViewCell")

您应该拥有CustomTableViewCell.xib文件,其中包含具有重用标识符的表格视图单元格CustomTableViewCell

答案 2 :(得分:0)

查看您的单元格companyLabel的布局方式。它存在与否?

在您的代码中,我将companyLabel替换为默认textLabel,这对我有用。

cell.textLabel!.text = self.items[indexPath.row]

答案 3 :(得分:0)

我认为没有调用awakeFromNib,因为你没有注册一个nib而是一个类。试试这个:

class TableViewCell: UITableViewCell {
    let companyName = UILabel()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        // Initialization code
        companyName.frame = CGRectMake(0, 0, 200, 20)
        companyName.translatesAutoresizingMaskIntoConstraints = false
        contentView.addSubview(companyName)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}