Более одной динамической таблицы с динамическим столбцом Swift 4 - PullRequest
0 голосов
/ 24 октября 2019

таблица: [{
Id,
Имя,
Тип,
строка [{
Id,
Имя
}],
столбец[{
Id,
Имя
}]
}]

blog.adgager.com / wp-content / uploads / 2017/07 / mobile_surveys.jpeg

(простое представление)

Мне нужно добавить более одной таблицы в контроллер. Данные придут как JSON. изображение будет отсортировано в View controller.

Как мне это сделать? Я использую swift 4 программно tableview

Как динамически создавать более одного tableview в одном ControllerView.

Таблица должна содержать более одного столбца. Строки таблицы должны быть заполнены по типу таблицы. Если тип строки имеет флажок, метка в первом столбце будет флажком во всех остальных столбцах.

как я могу это сделать?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Создание нескольких табличных представлений относительно просто. Я предполагаю, что то же самое относится и к CollectionView, который вам понадобится, если вы хотите использовать настоящие многоколонные, а не мукти-компонентные ячейки tableView, хотя я никогда не пробовал.

Проще говоря, вам нужно создать два экземпляраТабличные представления и просто добавьте их как подпредставления. Интересный момент связан с обработкой функций делегата. У вас есть два варианта:

  1. использовать два разных класса в качестве делегатов, по одному для каждого. Это часто легче понять, но все же включает в себя дублирование большого количества кода котельной пластины.
  2. используйте 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!

0 голосов
/ 24 октября 2019

Я предлагаю вам взять одно табличное представление с несколькими разделами и строками. Не уверен, как выглядит ваш UX. но когда у нас есть концепция numberOfSection и NumberOf Rows, где каждый раздел может быть разделен заголовком (сгруппированное табличное представление), тогда мы не знаем, зачем нам нужно несколько табличных представлений в одном ViewController.

...