TableView 在 IB 中设计时显示内容,但在以编程方式编写时不显示内容,我做错了什么


class AddTripExpense: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate {
    //  @IBOutlet weak var storePicker: UITableView!
    var storePicker = UITableView()
    override func viewDidLoad() {
        super.viewDidLoad()

        storePicker.delegate = self
        storePicker.dataSource = self
        storePicker = UITableView(frame: CGRect(x: storeNameTF.frame.origin.x + 3, y: storeNameTF.frame.origin.y + storeNameTF.frame.height + 3, width: storeNameTF.frame.width + 50, height: 150), style: UITableViewStyle.plain)
        view.addSubview(storePicker)
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if (tableView == storePicker) {
            return savedStoresArray.count
        }
        return 15
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
        if(tableView == storePicker) {
            // let typeOfExpenseCell = tableView.dequeueReusableCell(withIdentifier: "typeOfExpenseCell", for: indexPath)
            let storePickerCell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "storePickerCell")
            storePickerCell.textLabel?.text = savedStoresArray[indexPath.row]
            return storePickerCell
        }
        return cell
}

设置delegatedatasource的顺序应如下所示,

storePicker = UITableView(frame: CGRect(x: storeNameTF.frame.origin.x + 3, y: storeNameTF.frame.origin.y + storeNameTF.frame.height + 3, width: storeNameTF.frame.width + 50, height: 150), style: UITableViewStyle.plain)
storePicker.delegate = self
storePicker.dataSource = self
view.addSubview(storePicker)

当前,您正在将delegatedataSource分配给使用此行重新分配storePicker实例

storePicker = UITableView(frame: CGRect(x: storeNameTF.frame.origin.x + 3, y: storeNameTF.frame.origin.y + storeNameTF.frame.height + 3, width: storeNameTF.frame.width + 50, height: 150), style: UITableViewStyle.plain)

storePicker重新分配给新UITableView实例会delegatedatasource设置为nil,因此您需要按上述方式再次设置它们。

设置初始化

后的delegatedataSource UITableView

    storePicker = UITableView(frame: CGRect(x: storeNameTF.frame.origin.x + 3, y: storeNameTF.frame.origin.y + storeNameTF.frame.height + 3, width: storeNameTF.frame.width + 50, height: 150), style: UITableViewStyle.plain)
    storePicker.delegate = self
    storePicker.dataSource = self
    view.addSubview(storePicker)
    storePicker.reloadData()

最新更新