2016-04-06 17 views
1

Elimden geçtiğim diğer yayınlardan bazıları gibi, burada Swift’e yeni olduğumu söylediğim kısım. En sevdiğiniz filmler için bir görüntü ve veri (Çekirdek Veriler) depolamanıza izin veren bir uygulama var. Bu bölüm iyi çalışıyor. Yeni bir yazı oluşturabilir ve tableViewCell aracılığıyla görüntüleyebilirim. Bir sorun yaşadığım bölüm, bir hücreye dokunduktan sonra görüntü ve verileri bir ayrıntılar sayfasında görüntülüyor.TabloViewCell'den Ayrıntıya Geçme Değerleri Görüntüleme

Konuyla ilgili diğer yayınları ve makaleleri okudum ve eminim ki didSelectRowAtIndexPath ve prepareForSegue'u kullanmam gerekiyor, ancak ne ekleyeceğimi ve nasıl yapacağımı anlamıyorum. Problemin bir kısmı Swift için yeni. Ayrıntılar ve kodlarım için aşağıya bakın. Daha fazla ayrıntıya ihtiyacınız varsa bana bildirin. Herhangi bir yardım büyük takdir edilecektir. Ayrıca herhangi birisini biliyorsanız, konuyla ilgili bazı yararlı okuma materyallerine bir bağlantıyı da seveceğim. Aşağıdaki dosyalara ek olarak, bir post (PostMovieVC.swift) ve özel hücrem (MovieCell.swift) için bir tane de var.

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

detailVC Tür dizi veya sözlükteki biri değişken, viewController içinde tableview didsselect o diziyi başlatmak beyan filmde
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'de ViewController ve MoviewDetailsVC arasında segue eklediniz mi? – Bettimms

+0

görüntü denetleyicinin ayrıntılarına ilk denetim denetleyicisi arasında segue oluşturmanız gerekir. indexPath.row kaydedin ve bundan sonra prepareForSegue yönteminde bu dizin yolu satır değerini kullanın. – vikash1307

+0

Bunu hatırla, yep, Ben ana VC'den MovieDetailsVC'ye bir "Show" segue yarattım. – Raden13

cevap

-1

, moviewdetailvc'in viewdidload'ında bu detayları kullanabilirsiniz

+0

Plaese bana bu cevabın indirilmesinin nedenini verdi –

0

Güncelleme prepareForSegue fonk şöyle: Kaldırılan

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 aşağıdaki kod:

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

yukarıda Değiştirilen:Sorunum şöyle kodumu güncelleyerek çözüldü

var movie: Movie? 

Güncelleştirilen görünümWillAppear aşağıdaki gibi:

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 

    }