我基本上想创建一个自定义视图并向其中添加一个表视图。我能够成功执行此操作,并且在运行代码时tableview也可以正确显示。但是,尽管已在viewDidLoad
中注册了自定义tablview单元格,但tablview显示为空。这是我设计要加载到tablview中的自定义tableview单元。
我制作的自定义视图类的.swift文件看起来像这样...
import UIKit
@IBDesignable class TagResolutionView: UIView {
@IBOutlet var tagResolutionView: UIView!
@IBOutlet private weak var tableview: UITableView!
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
override func awakeFromNib() {
super.awakeFromNib()
}
@IBOutlet weak var delegate: UITableViewDelegate? {
get {
return tableview.delegate
}
set {
tableview.delegate = newValue
}
}
@IBOutlet weak var dataSource: UITableViewDataSource? {
get {
return tableview.dataSource
}
set {
tableview.dataSource = newValue
}
}
func registerClass(cellClass: AnyClass?, forCellReuseIdentifier identifier: String) {
tableview.register(cellClass, forCellReuseIdentifier: "cellClass")
}
func dequeueReusableCellWithIdentifier(identifier: String) -> UITableViewCell? {
return tableview.dequeueReusableCell(withIdentifier: identifier)
}
private func commonInit() {
Bundle.main.loadNibNamed("TagResolutionView", owner: self, options: nil)
addSubview(tagResolutionView)
tagResolutionView.frame = self.bounds
tagResolutionView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
}
这就是我在主视图控制器中设置tableview的方式...
在viewDidLoad
中,
standardsProceduresView.delegate = self
standardsProceduresView.dataSource = self
standardsProceduresView.registerClass(cellClass: UpdatingListTableViewCell.self, forCellReuseIdentifier: "cellClass")
进一步
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UpdatingListTableViewCell = self.standardsProceduresView.dequeueReusableCellWithIdentifier(identifier: "cellClass") as! UpdatingListTableViewCell
cell.nameLbl.text = "MyName" //But here I get a crash saying 'Unexpectedly found nil while implicitly unwrapping an Optional value'
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
答案 0 :(得分:0)
该崩溃告诉您单元的出队或将该单元强制转换为给定类有问题。也许一个接一个地做这些,并添加一个断点(或打印)以查看强制转换之前出队的结果:
let cell = self.standardsProceduresView.dequeueReusableCellWithIdentifier(identifier: "cellClass")
print(cell)
let updatingCell = cell as! UpdatingListTableViewCell
我还可以看到您在注册课程之前设置了dataSource
,这可能会导致问题。设置dataSource
之前,请先尝试注册课程。
答案 1 :(得分:0)
问题是我没有注册笔尖...
代替这个。.
func registerClass(cellClass: AnyClass?, forCellReuseIdentifier identifier: String) {
tableview.register(cellClass, forCellReuseIdentifier: "cellClass")
}
我必须写这个...
func registerClass(cellClass: AnyClass?, forCellReuseIdentifier identifier: String) {
let nib = UINib(nibName: "UpdatingListTableViewCell", bundle: nil)
tableview.register(nib, forCellReuseIdentifier: "cellClass")
}