繁体   English   中英

UITableViewCell 数据未显示在 UITableViewController 中

[英]UITableViewCell data not showing up in 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
    }}}

出于某种原因,当我删除? 从设置标签文本开始,它说eventNameeventStartString为零,但我有打印语句确保它们不是。

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")

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

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

let vc = EventInboxTableViewController()

你必须从故事板实例化它:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM