自定义 tableview 单元 xib 出口返回 nil
Posted
技术标签:
【中文标题】自定义 tableview 单元 xib 出口返回 nil【英文标题】:custom tableview cell xib outlets returning nil 【发布时间】:2020-07-08 08:40:35 【问题描述】:我有一个带有 tableview 的视图控制器。我想用我用 xib 文件以编程方式创建的自定义 uitableviewcell 注册我的 tableview。在自定义单元格内,我有一个可以更改网点标签值的函数,这就是我遇到致命发现 nil 错误的地方。这是我的视图控制器代码。
class AllTasksViewController: UIViewController
var tableView = UITableView()
func configureTableView()
view.addSubview(tableView)
setTableViewDelegates()
tableView.rowHeight = 50
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
tableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
tableView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
tableView.register(CustomCellNSB2.self, forCellReuseIdentifier: "CustomCellNSB2")
func setTableViewDelegates()
tableView.delegate = self
tableView.dataSource = self
override func viewDidLoad()
super.viewDidLoad()
configureTableView()
print("allTasksView loaded")
//add some positioning and size constraints here for allTasksView
extension AllTasksViewController: UITableViewDelegate, UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return allTasks.count
// Cell Data and Configuration
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let task = allTasks[indexPath.row] // creating a new task from the already stored task depending on the indexpath.row if indexPath.row is 3 then the task is tasks[3]
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCellNSB2", for: indexPath) as! CustomCellNSB2 // setting the identifier ( we have already set in the storyboard, the class of our cells to be our custom cell)
cell.setTask(task: task) `// this is where my app is crashing`
if (task.value(forKey: "isComplete") as! Bool == true)
cell.labelsToWhite()
cell.backgroundColor = Colors.greencomplete
cell.selectionStyle = .none
else
cell.backgroundColor = .white //adjust for nightmode later
cell.labelsToBlack()
print("CellData Task :", task.value(forKey: "isComplete") as! Bool, task.value(forKey: "name") as! String)
// if !(task.value(forKey: "isComplete") as! Bool)
// cell.backgroundColor = task.isImportant ? .purple : .white //according to the task isImportant attribute we set the background color
//
return cell
这是我的自定义 uitableview 单元格
import UIKit
import CoreData
class CustomCellNSB2: UITableViewCell
@IBOutlet weak var taskLabel: UILabel!
@IBOutlet weak var dateLabel: UILabel!
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 setTask(task: NSManagedObject ) debugger leads me here. this is where it's getting nil
taskLabel.text = task.value(forKey: "name") as? String
dateLabel.text = task.value(forKey: "date") as?
String
func labelsToWhite()
taskLabel.textColor = .white
dateLabel.textColor = .white
func labelsToBlack()
taskLabel.textColor = .black
dateLabel.textColor = .red
【问题讨论】:
你没有在cellForRowAt
方法中加载xib文件。
1st,在调用 setTask 之前确保这个任务已经包含有效数据,2nd 确保 taskLabel 和 dateLabel 连接到你的 xib
【参考方案1】:
您必须注册您的NIB ...您所做的就是注册课程。
改变这个:
tableView.register(CustomCellNSB2.self, forCellReuseIdentifier: "CustomCellNSB2")
到这里:
tableView.register(UINib(nibName: "CustomCellNSB2", bundle: nil), forCellReuseIdentifier: "CustomCellNSB2")
如果您正确配置了 xib/nib,那么您可能只需要这样做。
【讨论】:
是的,我刚刚测试了他的代码,我打算发布相同的:)以上是关于自定义 tableview 单元 xib 出口返回 nil的主要内容,如果未能解决你的问题,请参考以下文章
错误:在 swift 中使用 xib 文件注册自定义 tableView 单元格
单击tableView后隐藏xib的自定义UITableViewCell