gpt4 book ai didi

ios - 将值从 UITableViewCell 传递到详细信息 View

转载 作者:行者123 更新时间:2023-11-28 09:27:01 25 4
gpt4 key购买 nike

就像我筛选过的其他一些帖子一样,这是我说我是 Swift 新手的部分。我有一个应用程序,可以让你为你最喜欢的电影存储图像和数据(通过 Core Data)。这部分工作正常。我可以创建一个新帖子并通过我的 tableViewCell 查看它。我遇到问题的部分是,它在点击单元格后在详细信息页面上显示图像和数据。

我已经阅读了有关该主题的其他帖子和文章,我很确定我需要使用 didSelectRowAtIndexPathprepareForSegue,但我只是不明白什么我应该添加以及如何添加。部分问题在于 Swift 是新的。有关详细信息和我的代码,请参见下文。如果您需要更多详细信息,请告诉我。任何帮助将不胜感激。如果您知道的话,还希望链接到有关该主题的一些有用的阅读 Material 。除了下面的文件,我还有一个用于创建帖子的文件 (PostMovieVC.swift) 和一个用于我的自定义单元格的文件 (MovieCell.swift)。

ViewController.swift

import UIKit
import CoreData

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!
var movies = [Movie]()

var storeMovieTitle: String!

override func viewDidLoad() {
super.viewDidLoad()

tableView.delegate = self
tableView.dataSource = self
}

override func viewDidAppear(animated: Bool) {
fetchAndSetResults()
tableView.reloadData()
}

func fetchAndSetResults() {
let app = UIApplication.sharedApplication().delegate as! AppDelegate
let context = app.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Movie")

do {
let results = try context.executeFetchRequest(fetchRequest)
self.movies = results as! [Movie]
} catch let err as NSError {
print(err.debugDescription)
}
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

if let cell = tableView.dequeueReusableCellWithIdentifier("MovieCell") as? MovieCell {

let movie = movies[indexPath.row]
cell.configureCell(movie)
return cell
} else {
return MovieCell()
}
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let movie = movies[indexPath.row]

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ShowMovieDetail" {
let detailsVC = segue.destinationViewController as! MovieDetailsVC
let indexPath = tableView.indexPathForSelectedRow!
let movie = movies[indexPath.row]
detailsVC.passedTitle = storeMovieTitle

}
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 169.0
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return movies.count
}

}

MovieDetailsVC.swift

import UIKit
import CoreData

class MovieDetailsVC: UIViewController {

@IBOutlet weak var showMovieImg: UIImageView!
@IBOutlet weak var showTitleLbl: UILabel!
@IBOutlet weak var showSeenWithLbl: UILabel!
@IBOutlet weak var showQuoteLbl: UILabel!
@IBOutlet weak var showLinkLbl: UILabel!

var passedMovieImg: UIImageView!
var passedTitle: String?
var passedSeenWith: String?
var passedQuote: String?
var passedLink: String?

override func viewDidLoad() {
super.viewDidLoad()

}

override func viewWillAppear(animated: Bool) {

showMovieImg.image = passedMovieImg
showTitleLbl.text = passedTitle
showSeenWithLbl.text = passedSeenWith
showQuoteLbl.text = passedQuote
showLinkLbl.text = passedLink

}

@IBAction func closeBtnTapped(sender: AnyObject) {

dismissViewControllerAnimated(true, completion: nil)

}

}

最佳答案

我的问题已通过如下更新代码得到解决:

更新 prepareForSegue 函数如下:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// get the segue identifier
if segue.identifier == "ShowMovieDetail" {
// get a reference for the destination view controller and the selected cell indexPath
if let MovieDetailsVC = segue.destinationViewController as? MovieDetailsVC, let indexPath = tableView.indexPathForSelectedRow {


let movie = movies[indexPath.row]
MovieDetailsVC.movie = movie
}

}
}

从 MovieDetailsVC 中删除了以下代码:

    var passedMovieImg: UIImageView!
var passedTitle: String?
var passedSeenWith: String?
var passedQuote: String?
var passedLink: String?

将上面的替换为:

    var movie: Movie?

更新后的 viewWillAppear 如下:

    override func viewWillAppear(animated: Bool) {

showMovieImg.image = movie?.getMovieImg()
showTitleLbl.text = movie!.title
showSeenWithLbl.text = movie!.seenwith
showQuoteLbl.text = movie!.quote
showLinkLbl.text = movie!.trailer

}

关于ios - 将值从 UITableViewCell 传递到详细信息 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36441662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com