【问题标题】:Two tableviews in one view controller, one table view not showing up一个视图控制器中有两个表视图,一个表视图未显示
【发布时间】:2019-06-07 18:46:53
【问题描述】:

我有两个TableViews 在一个ViewController 中,只有一个表可以填充。我在我的视图控制器中为这两个表创建了插座。这是我的viewDidLoad

    override func viewDidLoad() {
    super.viewDidLoad()
    pickerTableView.delegate = self
    pickerTableView.dataSource = self

    tableView.delegate = self
    tableView.dataSource = self
    tableView.tableFooterView = UIView()

    pickerTableView.reloadData()
    tableView.reloadData()

}

似乎唯一读取的表是self.tableView,而pickerTableView 从未在UITableView 的协议中读取

extension MealViewController: UITableViewDelegate, UITableViewDataSource {

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    if tableView == self.tableView {
        let nameHeaderView = NameHeaderView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 40))
        nameHeaderView.delegate = self
        nameHeaderView.sectionIndex = section
        nameHeaderView.nameButton.setTitle(Data.userModels[section].name, for: .normal)
        return nameHeaderView
    } else {
        return nil
    }
}
func numberOfSections(in tableView: UITableView) -> Int {
    if tableView == self.tableView {
        return Data.userModels.count
    } else {
        return 0
    }
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if tableView == self.tableView {
        if Data.userModels[section].isExpandable {
            return Data.userModels[section].itemModels.count
        } else {
            return 0
        }
    } else if tableView == pickerTableView {
        return Data.userModels.count
    }
    else {
        return 0
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if tableView == self.tableView {
        let cell = tableView.dequeueReusableCell(withIdentifier: "nameCells", for: indexPath) as! MealTableViewCell
        cell.setup(itemModel: Data.userModels[indexPath.section].itemModels[indexPath.row])
        return cell

    } else if tableView == pickerTableView {
        let cell2 = tableView.dequeueReusableCell(withIdentifier: "pickerCells", for: indexPath) as! NamePickerTableViewCell
        cell2.setup(userModel: Data.userModels[indexPath.row])
        print(Data.userModels)
        return cell2
    }
    else {
        return UITableViewCell()
    }
}

}

我还对每个tableView 应用了约束,因此它们都出现在屏幕上。当我运行应用程序时,会显示 self.tableView 的数据,但 pickerTableView 显示为空。 self.tableView 需要部分,pickerTableView 不需要部分,这可能是个问题吗? Data.userModels 数组中还有数据。

仅供参考,这是我的UITableViewCell 课程:

class NamePickerTableViewCell: UITableViewCell {

@IBOutlet weak var namePickerLabel: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

func setup(userModel: UserModel) {
    namePickerLabel.text = userModel.name
}

}

感谢您的帮助!

【问题讨论】:

    标签: ios arrays swift uitableview


    【解决方案1】:

    如果你不需要pickerTableView中的任何部分,那么它也必须至少有一个部分。

    所以return 1 在方法numberOfSectionstableview == self. pickerTableView

    func numberOfSections(in tableView: UITableView) -> Int {
        if tableView == self.tableView {
            return Data.userModels.count
        } else {
            return 1
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多