Два просмотра таблицы в одном контроллере представления, одно представление таблицы не отображается - PullRequest
0 голосов
/ 07 июня 2019

У меня есть два TableView в одном 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
}

}

Спасибо за помощь!

1 Ответ

1 голос
/ 07 июня 2019

Если вам не нужен какой-либо раздел в pickerTableView, то он также должен иметь хотя бы один раздел.

Так return 1 в методе numberOfSections при tableview == self. pickerTableView.

func numberOfSections(in tableView: UITableView) -> Int {
    if tableView == self.tableView {
        return Data.userModels.count
    } else {
        return 1
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...