在 UITableView 中传递和显示数据

Posted

技术标签:

【中文标题】在 UITableView 中传递和显示数据【英文标题】:Passing and displaying data in UITableView 【发布时间】:2020-04-11 23:49:06 【问题描述】:

我对 swift 很陌生,但我一直在尝试将 json 数据从一个视图控制器传递到 UITableView,但是我很难在 tableview 单元格中实际显示任何数据

视图控制器 (将数据发送到第二个视图控制器)

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 单元格具有标题、发布日期和概览标签以及 UIImage。我的意图是用户从 viewController 的表视图中选择一部电影(到目前为止有效),然后转到 MovieDetailsViewController 显示更多详细信息

打印到控制台也已确认数据已发送到第二个视图控制器 我假设:

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

    cell.titleLabel!.text = movieTitle

是否足以在表格视图单元格中打印数据?

【问题讨论】:

【参考方案1】:

我相信您的问题是您如何在MovieDetailsViewController 中使用newMovies。我在代码中看不到任何地方 newMovies 正在填充数据。如果是这种情况,您的计数将始终为零,并且不会填充表格视图单元格。

【讨论】:

那么,是否可以将 movieTitle 等附加到 newMovies 的空数组中?假设这会解决它? 要回答您的问题,如果您将movieTitle 或任何其他属性附加到newMovies,那么是的,它会起作用。

以上是关于在 UITableView 中传递和显示数据的主要内容,如果未能解决你的问题,请参考以下文章

iOS:重新加载 UITableView 后滑动显示数据

在后台删除的数据导致 UITableView 中的索引超出范围崩溃

如何在 UITableView 中显示带有视频图像的视频文件?

从 XIB 加载的 UITableView Sectionheader 有时显示不正确

将 UIButton 放入 UITableView

用部分动态填充分组的 uitableView