当单元格具有值

时间:2016-06-27 14:45:22

标签: ios swift uitableview model-view-controller

我有一个带有一些简单标签和UIImage的自定义单元格。一切似乎都设置正确,并通过调试器显示一切都获得一个值,甚至使用调试器中的打印显示标签有文本。但是我的表视图在执行时仍然是空的。我一直在看这个问题太久了,无法弄清楚问题。

这是单元格代码

class CurrentFileCell: UITableViewCell {


@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var statusImage: UIImageView!
@IBOutlet weak var dateLabel: UILabel!


var currentContent: AircraftContent! {
    didSet{
        setStyles(Constants.appStyleSetting)

        self.nameLabel.text = currentContent.contentName
        self.dateLabel.text = currentContent.contentStatus
        self.statusImage.image = UIImage(named: "color_label_circle_green")

    }
}

override func awakeFromNib() {
    super.awakeFromNib()
}

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

private func setStyles(settings: StyleSettings) {
    let tableFont = UIFont(name: settings.bodyFont, size: CGFloat(settings.tableFontSize))
    nameLabel.font = tableFont
    dateLabel.font = tableFont

    // Text color
    let tableFontColor = settings.tableFontColor
    nameLabel.textColor = tableFontColor
    dateLabel.textColor = tableFontColor
}

这是ViewController代码,里面有一个tableview。

class CurrentFilesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var content: AircraftContent?

@IBOutlet weak var currentFiles: UILabel!
@IBOutlet weak var downloadingLabel: UILabel!
@IBOutlet weak var readyLabel: UILabel!

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.delegate = self
    self.tableView.dataSource = self

    self.content = loadContent()
    setStyles(Constants.appStyleSetting)
    //self.tableView.reloadData()
            // Do any additional setup after loading the view.
}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CurrentFileCell", forIndexPath: indexPath) as? CurrentFileCell
    cell?.currentContent = content

    return cell!
}


func loadContent() -> AircraftContent {
    return (NSKeyedUnarchiver.unarchiveObjectWithFile(AircraftContent.ArchiveURL.path!) as? AircraftContent)!
}

private func setStyles(settings: StyleSettings) {
    let titleFont = UIFont(name: settings.bodyFont, size: CGFloat(settings.titleFontSize))
    let key = UIFont(name: settings.bodyFont, size: CGFloat(settings.tableFontSize))
    currentFiles.font = titleFont
    downloadingLabel.font = key
    readyLabel.font = key

    // Text color
    let titleFontColor = settings.titleFontColor
    currentFiles.textColor = titleFontColor
    downloadingLabel.textColor = titleFontColor
    readyLabel.textColor = titleFontColor

}

以下是一些显示单元格不为空的调试位置的图像,还打印出具有值但在模拟过程中未显示的标签。

http://imgur.com/a/dBkpe

这是显示原型细胞的图像。单元格具有正确的类集和标识符。

http://imgur.com/PKtFTeQ

最后一张图片显示原型单元格链接到CurrentFileCell内的标签。

http://imgur.com/nW0QUjM

对此有任何帮助将不胜感激。我已经尝试重新创建所有内容,但仍然难以接受,因为看起来一切都应该如此。

3 个答案:

答案 0 :(得分:0)

您必须为表视图实现'heightForRowAtIndexPath'方法

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

        let height:CGFloat = 75
        return height

}

答案 1 :(得分:0)

您可以考虑注册自定义类,因为它看起来不像您。您可以使用View Controller的viewDidLoad中的以下代码执行此操作。

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

如果您使用外部笔尖,则需要使用registerNib,如下所示:

tableView.registerNib(UINib(name:"ReplaceWithYourNibName", bundle: nil), forCellReuseIdentifier: "ReuseIdentifier")

当然,请使用适当的值替换ReplaceWithYourNibNameReuseIdentifier。此外,如果您的笔尖位于不同的包中,请指定而不是nil(nil默认为主包)。

但是,请不要同时使用registerClassregisterNib,因为您使用的是最后一个,并且它们被设计为互斥。每当您创建自定义UITableViewCell时,除非您在故事板中明确设置,否则必须使用其中任何一个才能生效。

此外,您可以而不是,使用原型单元格来定义您的自定义单元格,我相信这会自动注册单元格。但如果您不使用原型单元格,请确保使用registerClassregisterNib

祝你好运!希望这有帮助!

答案 2 :(得分:0)

如果您的单元格是静态单元格,则需要在UITableViewDataSource中注释掉这些方法:

/*    override func numberOfSections(in tableView: UITableView) -> Int {
 // #warning Incomplete implementation, return the number of sections
    return 0
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return 0
} */