Swift实现TableView点击跳转详情页并展示电影海报、标题与年份
实现详情页数据填充的步骤
1. 给DetailViewController添加数据接收属性
打开DetailViewController.swift,新增对应的数据属性,并在页面加载时完成UI填充:
import UIKit class DetailViewController: UIViewController { // 假设已通过Storyboard关联以下UI控件 @IBOutlet weak var posterImageView: UIImageView! @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var yearLabel: UILabel! // 新增接收选中电影的属性 var selectedMovie: Movie? override func viewDidLoad() { super.viewDidLoad() fillUIWithMovieData() } // 封装UI填充逻辑 private func fillUIWithMovieData() { guard let movie = selectedMovie else { return } titleLabel.text = movie.title yearLabel.text = movie.year // 本地图片直接加载,网络图片需用网络请求加载 posterImageView.image = UIImage(named: movie.poster) // 网络图片加载示例(可替换为SDWebImage等第三方库简化逻辑) // if let posterUrl = URL(string: movie.posterUrl) { // URLSession.shared.dataTask(with: posterUrl) { [weak self] data, _, error in // guard let data = data, error == nil else { return } // DispatchQueue.main.async { // self?.posterImageView.image = UIImage(data: data) // } // }.resume() // } } }
2. 在ViewController中传递选中的电影数据
打开ViewController.swift,在单元格点击方法中给详情页赋值:
import UIKit class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var tableView: UITableView! // 假设已初始化电影数据数组 var movies: [Movie] = [] // 已实现的数据源方法(numberOfRowsInSection、cellForRowAt)略 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let targetMovie = movies[indexPath.row] // 实例化详情页(Storyboard方式) guard let detailVC = storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as? DetailViewController else { return } // 传递数据 detailVC.selectedMovie = targetMovie // 跳转页面(导航栏跳转,模态跳转用present方法) navigationController?.pushViewController(detailVC, animated: true) } }
3. 检查Storyboard配置(若使用Storyboard)
- 确保
DetailViewController的Storyboard ID设置为DetailViewController(与代码中实例化的标识符一致) - 确认所有UI控件已正确关联IBOutlet,无断开情况
内容的提问来源于stack exchange,提问作者LordGrim
相关产品推荐
相关产品推荐

