首页 > 解决方案 > UITableViewCell 数据未显示在 UITableViewController 中

问题描述

我无法调试为什么我的 UITableview 单元格数据没有显示在 UITableview 中。UITableview 当前在用户导航到它时显示为空白。数据正确地进入 cellForRowAt 并进入设置单元格数据的函数。

设置单元格数据

class EventInboxTableViewCell: UITableViewCell {

@IBOutlet weak var eventNameLabel: UILabel!
@IBOutlet weak var eventCoverImageView: UIImageView!
@IBOutlet weak var eventStartLabel: UILabel!
@IBOutlet weak var eventEndLabel: UILabel!

var eventStartString = String()
var eventEndString = String()

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
}

func setEvent(_ event:Event) {

    eventNameLabel?.text = event.eventName

    if event.eventStart != nil {
        let eventStartTS = event.eventStart
        let eventStartDate = eventStartTS?.dateValue()
        self.eventStartString = AppWideService.dateToStringShort(date: eventStartDate!)
    }

    if event.eventEnd != nil {
        let eventEndTS = event.eventEnd
        let eventEndDate = eventEndTS?.dateValue()
        self.eventEndString = AppWideService.dateToStringShort(date: eventEndDate!)
    }

    print("Event inbox event \(eventStartString)")
    print("Event inbox event \(eventEndString)")

    eventStartLabel?.text = self.eventStartString
    eventEndLabel?.text = self.eventEndString

    guard let urlString = event.eventCoverUrl as? String else { return  }
    let url = URL(string: urlString)
    guard url != nil else {
        //Couldn't create url object
        return
    }
    eventCoverImageView?.sd_setImage(with: url) { (image, error, cacheType, url) in
        self.eventCoverImageView?.image = image
    }}}

出于某种原因,当我?从设置标签文本中删除它时,它说诸如eventNameor之类的值eventStartString为零,但我有确保它们不是的打印语句。

UITableView 数据源

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return retrievedEvents.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "EventInboxTableViewCell", for: indexPath) as! EventInboxTableViewCell

    let event = retrievedEvents[indexPath.row]

    cell.setEvent(event)

    return cell
}

在 viewDidLoad 中注册了单元格

tableView.register(EventInboxTableViewCell.self, forCellReuseIdentifier: "EventInboxTableViewCell")

标签: iosswiftuitableview

解决方案


问题是表视图控制器的使用方式。

如果你在 Storyboard 中设计了一个(任何类型的)视图控制器,并且你想使用它,你不能简单地说:

let vc = EventInboxTableViewController()

您必须从情节提要中实例化它:

if let vc = storyboard?.instantiateViewController(withIdentifier: "EventInboxTableViewController") as? EventInboxTableViewController {
    navigationController?.pushViewControllerFromLeft(controller: vc)
}

因此,在 Storyboard 中,将您的自定义类分配给您的UITableViewController,并确保填写Storyboard ID字段(使用您在代码中使用的字符串作为标识符)。


推荐阅读