Передача и отображение данных в UITableView - PullRequest
0 голосов
/ 12 апреля 2020

Я довольно новичок в Swift, но я пытался передать json данные из одного контроллера представления в UITableView, однако я изо всех сил пытаюсь фактически отобразить любые данные в ячейке таблицы

ViewController ( отправляет данные в контроллер второго представления)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let indexPath = tableView.indexPathForSelectedRow
    let index = indexPath?.row
let movieDetails = filteredMovies[index!]
let movieDetailsViewController = segue.destination as! MovieDetailsViewController

movieDetailsViewController.posterUrl = movieDetails.value(forKeyPath: "backdrop_path") as? String
movieDetailsViewController.coverUrl = movieDetails.value(forKeyPath: "poster_path") as? String
movieDetailsViewController.movieTitle = movieDetails.value(forKeyPath: "title") as? String
movieDetailsViewController.movieRating = movieDetails.value(forKeyPath: "vote_average") as! NSNumber as NSNumber

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")
dateFormatter.dateFormat = "yyyy-MM-dd"
let movieReleaseDateString = movieDetails.value(forKeyPath: "release_date") as? String
let movieReleaseDate = dateFormatter.date(from:movieReleaseDateString!)
dateFormatter.dateFormat = "MMMM d, yyyy"
movieDetailsViewController.movieReleaseDate = dateFormatter.string(from: movieReleaseDate!)

    movieDetailsViewController.movieOverview = movieDetails.value(forKeyPath: "overview") as? String
}

MovieDetailsViewController

  var newMovies: [NSDictionary] = []
    var movieTitle: String!
    var movieRating: NSNumber!
    var movieReleaseDate: String!
    var movieOverview: String!
    var posterUrl: String!
    var coverUrl: String!

    @IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self
    tableView.estimatedRowHeight = 800
    tableView.rowHeight = UITableView.automaticDimension
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.newMovies.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "DetailCell") as!
    DetailTableViewCell

    cell.titleLabel!.text = movieTitle
    cell.overviewLabel!.text = movieOverview

    cell.releaseLabel.text = movieReleaseDate
    let numberFormatter = NumberFormatter()
   numberFormatter.numberStyle = .none
   let movieRatingString = numberFormatter.string(from: movieRating)
    return cell
}

DetailTableViewCell

 @IBOutlet weak var coverView: UIImageView!
    @IBOutlet weak var posterView: UIImageView!
    @IBOutlet weak var releaseLabel: UILabel!
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var ratingLabel: UILabel!
    @IBOutlet weak var overviewLabel: UILabel!

Я настроил раскадровку так, чтобы ячейка TableViewCell имела заголовок, Releaseate и обзор меток, а также UIImage. Я предполагаю, что пользователь выбирает mov ie в табличном представлении из viewController (который работает до сих пор) и затем переходит к MovieDetailsViewController, где отображаются дополнительные подробности

Печать на консоль также подтвердила, что данные имеют был отправлен во второй контроллер представления Я предполагал, что:

 let cell = tableView.dequeueReusableCell(withIdentifier: "DetailCell") as!
    DetailTableViewCell

    cell.titleLabel!.text = movieTitle

будет достаточно для печати данных в ячейке табличного представления?

1 Ответ

1 голос
/ 12 апреля 2020

Я считаю, что ваша проблема в том, как вы используете newMovies в MovieDetailsViewController. Я не вижу нигде в коде, где newMovies заполняется данными. В таком случае ваш счетчик всегда будет равен нулю и не заполнит ячейку табличного представления.

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