我正在尝试在UITableViewCell内设置一个UITableView,并且遵循对Is it possible to add UITableView within a UITableViewCell
的选定答案这是我的TableViewCell类的代码,其中包含内部TableView:
import UIKit
class tvc_item: UITableViewCell, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var ivItem: UIImageView!
@IBOutlet weak var lblItemName: UILabel!
@IBOutlet weak var tvInner: UITableView!
var itemdata = Item()
override func awakeFromNib() {
super.awakeFromNib()
setUpTable()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setUpTable()
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
override func layoutSubviews() {
super.layoutSubviews()
//tvInner?.frame = CGRectMake(0.2, 0.3, self.bounds.size.width-5, self.bounds.size.height-5)
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
func setUpTable(){
tvInner.delegate = self // Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
tvInner.dataSource = self
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return itemdata.rows.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell_itemrow") as! cell_itemrow
cell.lblRowLabel.text = String(itemdata.rows[indexPath.row].size)
return cell
}
}
当我运行代码时,它死在这一行:
tvInner.delegate = self
有错误:
线程1:致命错误:在展开可选值时意外发现nil
所以我假设tvInner为零,但是为什么呢?那我该怎么办?
tvInner的插座似乎已正确连接,并且插座图标内显示一个黑圈。
答案 0 :(得分:2)
您需要覆盖awakeFromNib
并在此方法内移动setUpTable()
。
答案 1 :(得分:1)
似乎您使用xib或情节提要来配置 tvc_item 布局。
所以,最好的方法是
删除:
override func awakeFromNib() {
super.awakeFromNib()
setUpTable()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setUpTable()
}
func setUpTable(){
tvInner.delegate = self // Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
tvInner.dataSource = self
}
在IB中配置:
如果您仍要在代码中进行配置
答案 2 :(得分:0)
似乎您忘记了将setupTable()方法放在覆盖init上。