[英]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.从设置标签文本开始,它说
eventName
或eventStartString
为零,但我有打印语句确保它们不是。
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.