Как избежать использования миллиона контроллеров представления для списка таблиц? - PullRequest
0 голосов
/ 28 января 2019

Вот пример того, что я хочу сделать.

У вас есть табличное представление со списком различных видео.Когда вы нажимаете на видео, вы переходите к подробному контроллеру просмотра (видео вверху, описание ниже).Прямо сейчас я создаю новый контроллер представления, добавляю видео / текст, связываю переход, а затем создаю другой контроллер представления и начинаю заново.Вместо того, чтобы иметь миллион контроллеров представления, разве вы не можете сделать это с помощью всего одного контроллера представления и подавать текст / видео из файла swift?Я относительно новичок, поэтому, если кто-то может объяснить процесс кристально ясно, это будет высоко ценится.Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вам нужен только один VC для отображения множества ваших видео.

Допустим, у вас есть такая модель:

struct Video {
    let videoLink: URL
    let description: String
}

И ваш контроллер табличного представления использует массив Video s называется videos в качестве источника данных.

В вашем методе didSelectRowAt вы можете получить выбранное видео и выполнить передачу с выбранным видео в качестве отправителя:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let videoSelected = videos[indexPath.row]
    performSegue(withIdentifier: "showVideo", sender: videoSelected)
}

Теперь создайте один VideoViewController.swift файл и сделайте что-то вроде этого:

class VideoViewController: UIViewController {
    var video: Video!

    // write code for this VC to display not a specific video, but "self.video"
    // For example, instead of setting the label's text to a hardcoded description, set it to "self.video.description"
}

Затем вернитесь к контроллеру табличного представления и переопределите prepareForSegue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? VideoViewController {
        vc.video = sender as! Video
    }
}
0 голосов
/ 28 января 2019

Да, вы можете сделать это только с 2 vcs (список и детали), выполнив это (известный как Внедрение зависимостей )

let vc = YourTableVC()
vc.arr = // set arr here
present///

class YourTableVC : UITableViewController {
  var arr = [YourModel]()
}

Где модель

struct YourModel {
  // add properties
}

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

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