2016-06-29 11 views
2

私のアプリケーションでXibファイルを使用しています。 次のViewControllerにデータを渡す最初のviewControllerにtableViewがあります。私はimageViewと2つのラベルを含む私のtableViewのカスタムセルを作成しました。スウィフトでiosのストーリーボードを使用せずにtableViewCellのデータを次のviewControllerに共有する方法

これは私のコード

import UIKit 

class YASProductListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    // registering my custom cell 
    tableView.registerNib(UINib(nibName: "YASProductListTableViewCell", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: "cell") 
    let cell : YASProductListTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! YASProductListTableViewCell 
    cell.productNameLabel.text = prodcutNames[indexPath.row] 
    cell.productDetailLabel.text = productDetail[indexPath.row] 

    return cell 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return prodcutNames.count 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    return 140 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! YASProductListTableViewCell 

    let destination = YASProductDetaiilViewController(nibName: "YASProductDetaiilViewController", bundle: NSBundle.mainBundle()) 

    destination.productImage = cell.productImageView.image 
    destination.productTitle = cell.productNameLabel.text! 

    let productDetails = YASProductDetaiilViewController(nibName: "YASProductDetaiilViewController", bundle: nil) as YASProductDetaiilViewController 
    navigationController?.navigationBarHidden = false 
    navigationController?.title = "" 
    navigationController?.pushViewController(productDetails, animated: true) 

} 

では今、私が何をしたい任意のセルに次のViewControllerたときに、ユーザーのタップに画像とラベルのテキストを渡しています。あなたは、私はそれを試してみましたが、そのdidSelectRowAtIndexPathが動作していない見ることができるようにここでは、次のViewController

import UIKit 

class YASProductDetaiilViewController: UIViewController { 
@IBOutlet weak var productImageView: UIImageView! 
@IBOutlet weak var productTitleLabel: UILabel! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    setupViewControllerUI() 
    // Do any additional setup after loading the view. 
} 

// MARK: - UIViewController helper Methods 

func setupViewControllerUI(){ 

    productImageView.image = productImage 
    productTitleLabel.text = productTitle 
} 
} 

のコードがあります。助けてください!おかげ

+0

あなたはuinavigationコントローラを使用していますか? –

+0

あなたは弱い財産を強く変えますか –

答えて

2

viewController間でデータを共有するための正しい方法を使用しています。しかし、あなたは間違いを犯しました。 ProductDetailViewControllerの2つのインスタンスを作成しています。あなたは先ViewCotrollerのインスタンスを1つだけ作成する必要があり、その後、あなたは単に私はそれが仕事を願っています

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! YASProductListTableViewCell 
    let productDetails = YASProductDetaiilViewController(nibName: "YASProductDetaiilViewController", bundle: nil) as YASProductDetaiilViewController 
    productDetails.productImage = cell.productImageView.image 
    productDetails.productTitle = cell.productNameLabel.text! 
    navigationController?.pushViewController(productDetails, animated: true) 

} 

を以下にごdidSelectRowAtIndexPath方法を置き換えることができ、それに応じてプロパティを設定します。

+0

説明してくれてありがとう。 – Byte

1
は、コードの下のように、これはあなたを助け

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! YASProductListTableViewCell 

let productDetails = YASProductDetaiilViewController(nibName: "YASProductDetaiilViewController", bundle: nil) as YASProductDetaiilViewController 
navigationController?.navigationBarHidden = false 
navigationController?.title = "" 
productDetails.productImage = cell.productImageView.image 
productDetails.productTitle = cell.productNameLabel.text! 
navigationController?.pushViewController(productDetails, animated: true) 

} 

希望をごdidSelect方法を変更し

+0

いいですね... !! –

+0

あなたがいない...まず私の答えを受け入れると、それを選択解除します。どうして? –

+0

私はあなたの答えを愛してupvoted。新しい承認された答えは、アクロリウムの問題についても説明しているからです。 – Byte

0

以下のようにお手伝いできますか?ここで

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! YASProductListTableViewCell 
     let objYASProductDetaiilViewController = self.storyboard?.instantiateViewControllerWithIdentifier("STRORYBOARD_ID") as? YASProductDetaiilViewController  
     objYASProductDetaiilViewController.productImage = cell.productImageView.image 
     objYASProductDetaiilViewController.productTitle = cell.productNameLabel.text! 
     self.navigationController?.pushViewController(objMedicalDevicesVC!, animated: true) 
     navigationController?.navigationBarHidden = false 
     navigationController?.title = "" 
     navigationController?.pushViewController(objYASProductDetaiilViewController, animated: true) 

    } 

あなたはimage Viewimage Viewにdirectly.Youを割り当てることはできませんが、最初のそれは、他のビューコントローラのイメージに与えるイメージを取得UIImage

import UIKit 

    class YASProductDetaiilViewController: UIViewController { 
    @IBOutlet weak var productImageView: UIImage! 
    @IBOutlet weak var productTitleLabel: UILabel! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     setupViewControllerUI() 
     // Do any additional setup after loading the view. 
    } 

    // MARK: - UIViewController helper Methods 

    func setupViewControllerUI(){ 

     productImageView.image = productImage 
     productTitleLabel.text = productTitle 
    } 
    } 
0

に画像に設定する必要があります作成すべての必要な情報の辞書とアレイに追加し、セルがクリックされたときにindexpath.rowを使用して取得

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

var dicTemp=prodcutNames[indexPath.row] as! NSMutableDictionary 
let destination = YASProductDetaiilViewController(nibName: "YASProductDetaiilViewController", bundle: NSBundle.mainBundle()) 

destination.productImage = prodcutNames.valueForKey("imageObj") //get image object 
destination.productTitle = prodcutNames.valueForKey("product_title")//get product title 

let productDetails = YASProductDetaiilViewController(nibName: "YASProductDetaiilViewController", bundle: nil) as YASProductDetaiilViewController 
navigationController?.navigationBarHidden = false 
navigationController?.title = "" 
navigationController?.pushViewController(productDetails, animated: true) 

} 
関連する問題