如何在索引路径的行中显示单元格中的数据模型内容?
Posted
技术标签:
【中文标题】如何在索引路径的行中显示单元格中的数据模型内容?【英文标题】:How to Display data model content in cell for row at indexpath? 【发布时间】:2017-03-12 14:09:53 【问题描述】:enter image description herehttps://i.stack.imgur.com/pRZu5.png 您好我正在尝试在 tableview 中显示特定对象的名称和 pointsWorth。但是 xcode 回答missionTitleLabel 不能在missionCell 上使用。是否可以显示我创建的对象的信息?
感谢我能得到的任何帮助!
这是我的代码: MasterViewController.swift:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "MissionCell", for: indexPath)
let event = self.fetchedResultsController.object(at: indexPath)
self.configureCell(cell, withEvent: event)
let mission = missions[indexPath.row]
MissionCell.missionTitleLabel?.text = mission
return cell
示例数据模型:
枚举类别枚举 案例一 案例b 案例c 案例d 公开课任务
var name: String
var pointsWorth: Int
var colorTheme: UIColor
var description: String
var category: CategoryEnum
init(name: String, pointsWorth: Int, colorTheme: UIColor, description: String, category: CategoryEnum)
self.name = name
self.pointsWorth = pointsWorth
self.colorTheme = colorTheme
self.description = description
self.category = category
letmission1 = Mission(name: "a", pointsWorth: 50, colorTheme: .blue, description: "a is the first letter in the alphabet", category:.a)
letmission2 = Mission(name: "b", pointsWorth: 60, colorTheme: .red, description: "b is the second letter in the alphabet", category:.b)
var 任务:[任务] = [任务 1,任务 2]
MissionCell.swift:
import UIKit
类 MissionCell: UITableViewCell
@IBOutlet weak var missionTitleLabel: UILabel!
@IBOutlet weak var missionPointLabel: UILabel!
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
【问题讨论】:
mission
的类型是什么?是字符串吗?
是的,它是一个字符串
【参考方案1】:
这里你应该使用cell
变量作为MissionCell
。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "MissionCell", for: indexPath) as! MissionCell
let event = self.fetchedResultsController.object(at: indexPath)
self.configureCell(cell, withEvent: event)
let mission = missions[indexPath.row]
cell.missionTitleLabel?.text = mission.name
return cell
希望对您有所帮助。
【讨论】:
谢谢!您的代码删除了错误,但当我运行应用程序时,名称未显示在表格视图中。 你能在override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
中调试吗?代码在这里触发了吗?
嘿,你能检查一下你的故事板吗?您应该像这样将delegate
和datasource
链接到您的视图控制器i1380.photobucket.com/albums/ah191/amar_11s/Amarendrasingh/…
我的委托和数据源似乎链接到我的视图控制器 [2]:i.stack.imgur.com/YkmG6.png
当我设置断点时,我可以看到以下方法没有运行:为 indexpath configureView + dataModel 中的行准备 segue Cell:Datamodel.swift【参考方案2】:
你应该像这样分配值:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "MissionCell", for: indexPath) as! MissionCell
let event = self.fetchedResultsController.object(at: indexPath)
self.configureCell(cell, withEvent: event)
let mission = missions[indexPath.row]
cell.missionTitleLabel?.text = mission.name
return cell
请记住,只有在您确定存在一种单元类型时才使用强制转换到 MissionCell,否则您会崩溃。 考虑:
if let cell = cell as? MissionCell
cell.missionTitleLabel?.text = mission.name
【讨论】:
感谢您的回答!执行此操作后,我收到以下消息:无法将 Mission 类型的值分配给 String 类型?有什么方法可以访问对象名称属性吗? 你应该使用mission.name
感谢 orxelm!这消除了错误,但是当我运行应用程序时,名称没有显示在 tableview 中。
可以分享截图吗?您是否看到正确数量的单元格,但它们只是空的?也许您没有将标签连接到单元格标签?
一定是出了点问题,因为我第二次运行应用程序时收到了一个 sigbart 原因:'无法使具有标识符 MissionCell 的单元格出列 - 必须为标识符注册一个 nib 或一个类或连接一个故事板中的原型单元格以上是关于如何在索引路径的行中显示单元格中的数据模型内容?的主要内容,如果未能解决你的问题,请参考以下文章
根据获得的当前单元格的索引路径,自定义单元格中的按钮单击功能