简体   繁体   English

UITableViewCell 数据未显示在 UITableViewController 中

[英]UITableViewCell data not showing up in UITableViewController

I am having trouble debugging why my UITableview cell data isn't showing up in the UITableview.我在调试为什么我的 UITableview 单元格数据没有显示在 UITableview 中时遇到问题。 The UITableview currently displays blank when the user navigates to it.当用户导航到 UITableview 时,它当前显示为空白。 Data is correctly going into the cellForRowAt and into the function that sets the cell data.数据正确进入 cellForRowAt 并进入设置单元格数据的函数。

Setting the cell data设置单元格数据

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
    }}}

For some reason when I remove the ?出于某种原因,当我删除? from setting the label text it says the values like eventName or eventStartString etc are nil, but I have print statements that ensure they are not.从设置标签文本开始,它说eventNameeventStartString为零,但我有打印语句确保它们不是。

UITableView Datasource 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
}

Registered the cell in viewDidLoad在 viewDidLoad 中注册单元格

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

The problem is the way the table view controller was being used.问题在于表视图控制器的使用方式。

If you design a View Controller (of any type) in Storyboard, and you want to use it, you cannot simply say:如果你在 Storyboard 中设计了一个 View Controller(任何类型的),并且你想使用它,你不能简单地说:

let vc = EventInboxTableViewController()

you have to instantiate it from the storyboard:你必须从故事板实例化它:

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

So, in Storyboard, assign your custom class to your UITableViewController , and make sure to fill in the Storyboard ID field (with the string you are using in code as the Identifier).因此,在 Storyboard 中,将您的自定义类分配给您的UITableViewController ,并确保填写Storyboard ID字段(使用您在代码中使用的字符串作为标识符)。

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

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