2016-04-06 82 views
1

與我已經過篩的其他帖子非常相似,下面是我說我是Swift新手的部分。我有一個應用程序,允許您爲自己喜歡的電影存儲圖像和數據(通過核心數據)。這部分工作正常。我能夠創建一個新的帖子,並通過我的tableViewCell查看它。我遇到問題的部分,它在單擊細胞後在細節頁面上顯示圖像和數據。從TableViewCell傳遞值到詳細視圖

我已閱讀關於這個主題的其他帖子和文章,我很確定我需要使用didSelectRowAtIndexPathprepareForSegue,但我只是不理解我應該添加和如何。部分問題對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) 

} 

} 
+0

您是否在TableViewCell上的ViewController和MoviewDetailsVC之間添加了segue? – Bettimms

+0

您需要在firstviewcontroller之間創建細節視圖控制器。保存indexPath.row,然後在prepareForSegue方法中使用該索引路徑行值。 – vikash1307

+0

忘了提及,是的,我創建了一個從我的主VC到MovieDetailsVC的「Show」segue。 – Raden13

回答

-1
在電影detailVC聲明類型的數組或字典中的一個變量,初始化陣列中的ViewController的tableview 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? 

更新後的視圖將出現如下內容:

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 

    } 
相關問題