與我已經過篩的其他帖子非常相似,下面是我說我是Swift新手的部分。我有一個應用程序,允許您爲自己喜歡的電影存儲圖像和數據(通過核心數據)。這部分工作正常。我能夠創建一個新的帖子,並通過我的tableViewCell查看它。我遇到問題的部分,它在單擊細胞後在細節頁面上顯示圖像和數據。從TableViewCell傳遞值到詳細視圖
我已閱讀關於這個主題的其他帖子和文章,我很確定我需要使用didSelectRowAtIndexPath
和prepareForSegue
,但我只是不理解我應該添加和如何。部分問題對Swift來說是新的。請參閱下面的細節和我的代碼。讓我知道你是否需要更多細節。任何幫助將不勝感激。如果您知道的話,還會喜歡關於這個主題的一些有用的閱讀材料的鏈接。除了下面的文件外,我還有一個用於創建帖子(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)
}
}
您是否在TableViewCell上的ViewController和MoviewDetailsVC之間添加了segue? – Bettimms
您需要在firstviewcontroller之間創建細節視圖控制器。保存indexPath.row,然後在prepareForSegue方法中使用該索引路徑行值。 – vikash1307
忘了提及,是的,我創建了一個從我的主VC到MovieDetailsVC的「Show」segue。 – Raden13