他の投稿とよく似ていますが、ここでは私がSwiftの新機能だと言っている部分があります。私はあなたのお気に入りの映画のためのイメージとデータ(コアデータを介して)を格納することができるアプリがあります。この部分はうまく動作します。私は新しい投稿を作成して、私のtableViewCellで見ることができます。私が問題を抱えている部分は、セルをタップした後、詳細ページに画像とデータを表示しています。TableViewCellから詳細ビューへの値の受け渡し
私はこの件に関して他の投稿と記事を読んでいますが、私はdidSelectRowAtIndexPath
とprepareForSegue
を使用する必要があると確信していますが、私は追加するべき内容と方法を理解していません。この問題の一部はSwiftには新しいものです。詳細と私のコードは以下を参照してください。詳細が必要な場合はお知らせください。どんな助けでも大歓迎です。もしあなたが知っていれば、その主題に関する役に立つ読書資料へのリンクも大好きです。以下のファイルに加えて、私はポスト(PostMovieVC.swift)とカスタムセル(MovieCell.swift)を作成するためのものも持っています。映画detailVCで
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間のセグエを追加しました! – Bettimms
詳細ビューコントローラへのfirstviewcontrollerの間にsegueを作成する必要があります。 indexPath.rowを保存した後、そのインデックスパスの行の値をprepareForSegueメソッドで使用します。 – vikash1307
私のメインVCからMovieDetailsVCへの "ショー"セグを作りました。 – Raden13