Создание нескольких табличных представлений относительно просто. Я предполагаю, что то же самое относится и к CollectionView, который вам понадобится, если вы хотите использовать настоящие многоколонные, а не мукти-компонентные ячейки tableView, хотя я никогда не пробовал.
Проще говоря, вам нужно создать два экземпляраТабличные представления и просто добавьте их как подпредставления. Интересный момент связан с обработкой функций делегата. У вас есть два варианта:
- использовать два разных класса в качестве делегатов, по одному для каждого. Это часто легче понять, но все же включает в себя дублирование большого количества кода котельной пластины.
- используйте 1 класс для обоих делегатов (может даже быть контроллером представления, но это может вызвать массовый синдром контроллера представления) и тестирование в каждомметод, к которому также применяется табличное представление.
Первый из них довольно очевиден, поэтому ниже приведен высокоуровневый пример второго.
class MyCustomCell: UITableViewCell {
static let cellID = "CustomCellID"
// set up custom tableViewCell as required
}
class MyVC: UIViewController {
var table1 = UITableView()
var table2 = UITableView()
override func viewDidLoad() {
super.viewDidLoad
table1.delegate = self
table1.datasource = self
table2.delegate = self
table2.datasource = self
view.addSubview(table1)
view.addSubview(table2)
tableView.register(MyCustomCell.self, forCellReuseIdentifier: MyCustomCell.cellID)
tableView.register(MyCustomCell.self, forCellReuseIdentifier: MyCustomCell.cellID)
//some AutoLayout code to layout the tables in the view
}
}
extension MyVC: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView === table1 {
//return appropriate value for section in table 1
} else {
//return appropriate value for section in table 1
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView === table1 {
//create and return cell for table 1
} else {
//create and return cell for table 2
}
}
}
Очевидно, что это тольконаметить и потребует фактического кода реализации и других необходимых функций tableView. Обратите внимание на использование ===
для проверки tableViews. Это проверяет, что они являются абсолютно одинаковыми объектами, а не просто эквивалентными объектами.
Если вам нужно иметь одинаковые значения для обеих таблиц (например, вы хотите, чтобы они использовали один и тот же tableViewCell), то вы можете покончить с этим. без проверок.
Написав все это, если хотя бы в одной из таблиц не показано статическое число строк и не может быть отключена прокрутка, я бы сказал, что это может выглядеть ужасно на iPhone, и в большинствечехлы не намного лучше на iPad!