0

我使用一个 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)
}
4

0 回答 0