2016-04-06 18 views
1

他の投稿とよく似ていますが、ここでは私がSwiftの新機能だと言っている部分があります。私はあなたのお気に入りの映画のためのイメージとデータ(コアデータを介して)を格納することができるアプリがあります。この部分はうまく動作します。私は新しい投稿を作成して、私のtableViewCellで見ることができます。私が問題を抱えている部分は、セルをタップした後、詳細ページに画像とデータを表示しています。TableViewCellから詳細ビューへの値の受け渡し

私はこの件に関して他の投稿と記事を読んでいますが、私はdidSelectRowAtIndexPathprepareForSegueを使用する必要があると確信していますが、私は追加するべき内容と方法を理解していません。この問題の一部は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) 

} 

} 
+0

あなたはTableViewCellクリック上のViewControllerとMoviewDetailsVC間のセグエを追加しました! – Bettimms

+0

詳細ビューコントローラへのfirstviewcontrollerの間にsegueを作成する必要があります。 indexPath.rowを保存した後、そのインデックスパスの行の値をprepareForSegueメソッドで使用します。 – vikash1307

+0

私のメインVCからMovieDetailsVCへの "ショー"セグを作りました。 – Raden13

答えて

-1

あなたは、型の配列や辞書の一つの変数を宣言するのViewControllerでテーブルビューのdidsselectにその配列を初期化moviewdetailvcのviewdidloadでこれらの詳細を使用できます

+0

Plaeseが私にこの回答へのdownvotingの理由を教えてくれます –

0

更新prepareForSegue funcを次のように:削除

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? 

viewWillを次のように変更しました。

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 

    } 
関連する問題