我使用一个 xib 文件来构建一个名为 SelectView 的 UIView,其中有一个按钮和一个 tableView。代码如下所示
@IBOutlet weak var selectTableView: UITableView!
@IBOutlet weak var notSureButton: UIButton!
我以编程方式在函数 awakeFromNib() 中设置 tableView 的委托和数据源,代码如下
override func awakeFromNib() {
super.awakeFromNib()
selectTableView.delegate = self
selectTableView.dataSource = self
let nib = UINib(nibName: "SelectCell", bundle: nil)
self.selectTableView.register(nib, forCellReuseIdentifier: "select cell")
}
当我运行该应用程序时,它在 awakeFromNib 处崩溃,因为 selectTableView 为零。
下面的 SelectView 类的代码
class SelectView: UIView {
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
override func awakeFromNib() {
super.awakeFromNib()
selectTableView.delegate = self
selectTableView.dataSource = self
let nib = UINib(nibName: "SelectCell", bundle: nil)
self.selectTableView.register(nib, forCellReuseIdentifier: "select cell")
}
var controller: LearnViewController?
@IBOutlet weak var selectTableView: UITableView!
@IBOutlet weak var notSureButton: UIButton!
}
extension SelectView: UITableViewDataSource, UITableViewDelegate{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = selectTableView.dequeueReusableCell(withIdentifier: "select cell", for: indexPath) as! SelectCell
if let vc = controller{
cell.indexLabel.text = String((vc.selectIndex[indexPath.row]) + ".")
cell.cardSuitImageView.image = UIImage(named: vc.cardSuitArray[indexPath.row])
cell.cardNumberLabel.text = vc.cardNumberArray[indexPath.row]
cell.cardNumberLabel.text = vc.cardNumberArray[indexPath.row]
}
return cell
}
}
我在 ViewController 的 viewDidLoad 函数中加载视图
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
selectView = Bundle.main.loadNibNamed("SelectView", owner: self, options: nil)![0] as! SelectView
selectView.controller = self
selectBaseView.addSubview(selectView)
}