Передача данных между табличными представлениями (5) с использованием структур и массивов - PullRequest
0 голосов
/ 16 апреля 2019

как я могу передавать данные между множественными табличными представлениями (5), и в каждой ячейке табличного представления есть массив данных, и при щелчке по данным или элементу массива он отправит нас в следующую ячейку табличных представлений, где данные, относящиеся к элементу, мы клик отображается. я отправляю свои данные в третью ячейку табличного представления, но я не знаю, как заполнить четвертую и пятую ячейку табличного представления. я использую подготовиться к переходу для передачи данных ..

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

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Есть множество способов сделать это.Я обычно предпочитаю назначить модель для TableViewCell и позволить ячейке отображать саму себя.

Учитывая, что у вас есть структура модели, подобная этой:

struct MyData: Codable {
    let planets: [Planet]
}

struct Planet: Codable {
    let name: String
    let continents: [Continent]
}

struct Continent: Codable {
    let name: String
    let countries: [Country]
}

struct Country: Codable {
    let name: String
    let states: [State]
}

struct State: Codable {
    let name: String
    let cities: [City]
}

struct City: Codable {
    let name: String
}

и PlanetCell, подобная этой:

class PlanetCell: UITableViewCell {
    static let identifier = "planetCell"

    @IBOutlet weak var titleLabel: UILabel!

    var planet: Planet! {
        didSet {
          renderSelf()
        }
    }

    private func renderSelf() {
      titleLabel.text = planet.name
    }
}

В вашем DataSource для первого TableView вы бы отобразили планету:

// MARK: - UITableViewDataSource
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: PlanetCell.identifier, for: indexPath) as! PlanetCell

    cell.planet = planets[indexPath.row]

    return cell
}

теперь, когда вы выбираете PlanetCell, просто используйте методы делегата из UITableViewDelegate для выполнения перехода и передачи данных в вашследующий ViewController.

// MARK: - UITableViewDelegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "showPlanet", sender: planets[indexPath.row])
}

// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  guard let continentsViewController = segue.destination as? ContinentsViewController else {
    return
  }

  continentsViewController.continents = (sender as! Planet).continents
}

просто примените ту же логику ко всем вашим контроллерам представления.

0 голосов
/ 16 апреля 2019

Вам нужно указать Tag для tableView, а с помощью Tag вы можете указать tableView в numberOfRowsInSection и cellForRowAt. С помощью Tag вы можете идентифицировать tableView и на основании этого вы можете назначить значение из определенного массива. Не забудьте добавить UITableViewDelegate и UITableViewDatasource.

Разница между UITableViewDelegate и UITableViewDatasource

Вам нужно просто вызвать коммутатор case и вернуть ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...