ios - 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
}}}
出于某种原因,当我?
从设置标签文本中删除它时,它说诸如eventName
or之类的值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")
解决方案
问题是表视图控制器的使用方式。
如果你在 Storyboard 中设计了一个(任何类型的)视图控制器,并且你想使用它,你不能简单地说:
let vc = EventInboxTableViewController()
您必须从情节提要中实例化它:
if let vc = storyboard?.instantiateViewController(withIdentifier: "EventInboxTableViewController") as? EventInboxTableViewController {
navigationController?.pushViewControllerFromLeft(controller: vc)
}
因此,在 Storyboard 中,将您的自定义类分配给您的UITableViewController
,并确保填写Storyboard ID字段(使用您在代码中使用的字符串作为标识符)。
推荐阅读
- oracle - Oracle Reports - 使用 dblink 为空的字符串字段
- makefile - Make:在 make 中使用静态模式规则
- javascript - PHP & AJAX - 不刷新以获取数据到另一个页面并使其成为模态
- typescript - 使用 ng-packagr 时 Angular 通用构建失败?
- java - 输入参数为 Map 类型的 Java Spark UDF
- heroku - 在 heroku 中部署时,prisma graphql 令牌无法验证
- hive - 如何通过配置单元在序列文件中写入自定义键值
- jquery - 查找重复的 div 内容并替换它
- python - 在MoviePy中使文本在宽度和高度之间自动调整为TextClip
- java - 生成 TestNG.xml 文件中的问题