2015-11-16 22 views
1

如何在选择单元格时使用prepare for segue将tablecell(mainCell)中的图像(tweetImg)和日期(dateLbl)传输到Newviewcontroller?在我的情况下,我使用parse.com作为我的后端检索图像和日期数据。我对编程新手会感谢一些帮助,谢谢。如何使用准备segue方法将数据从表格单元传输到新的视图控制器?

mainVC

import UIKit 
class mainVC: UIViewController, UITableViewDataSource, UITableViewDelegate, { 

    @IBOutlet weak var resultsTable: UITableView! 

    var resultsStartdateArray = [String]() 
    var resultsTweetImageFiles = [PFFile?]() 

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

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell:mainCell = tableView.dequeueReusableCellWithIdentifier("Cell") as! mainCell 
     cell.dateLbl.text = self.resultsStartdateArray[indexPath.row] 
     resultsTweetImageFiles[indexPath.row]?.getDataInBackgroundWithBlock({ 
       (imageData:NSData?, error:NSError?) -> Void in 

       if error == nil { 

        let image = UIImage(data: imageData!) 
        cell.tweetImg.image = image 


       } 

      }) 
     return cell 
    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     self.performSegueWithIdentifier("SendDataSegue", sender: self) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    { 
     if (segue.identifier == "SendDataSegue") 
     { 
      let destination: NewViewController = segue.destinationViewController as! NewViewController 
      // I believe the missing code should be here 
     } 
    } 
} 

mainCell

import UIKit 
class mainCell: UITableViewCell { 

     @IBOutlet weak var tweetImg: UIImageView! 
     @IBOutlet weak var dateLbl: UILabel! 

     override func awakeFromNib() { 
     super.awakeFromNib() 
    } 
} 

NewViewController

import UIKit 

class NewViewController: UIViewController { 

     @IBOutlet weak var dateLbl: UILabel! 
     @IBOutlet weak var tweetImg: UIImageView! 

var titleString: String! 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    self.dateLbl.text = self.titleString 

} 

回答

1

娄我已经提到示例模板代码。根据下面提到的代码组织您的代码。重要的部分是在prepareForSegue而不是didSelectRowAtIndexPath中选择一个单元格。这是let IndexPath = self.tableView.indexPathForSelectedRow()!

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    //Index path is the selected cell 
    let IndexPath = self.tableView.indexPathForSelectedRow()! 

    //Here you can assign your tweetImg and dateLbl 

    let newViewController = segue.destinationViewController as! NewViewController 
    newViewController.dateLbl.text = //your date label value 
    //here assign your image to destination view controller property 
} 
+0

@ Dimuth Lasantha这里是我做了什么和它的工作:覆盖FUNC prepareForSegue(SEGUE:UIStoryboardSegue,发件人:AnyObject){ 让即将到来:NewViewController = segue.destinationViewController为! NewViewController let indexPath = self.resultsTable.indexPathForSelectedRow! 让titleString = self.resultsStartdateArray [indexPath.row]作为字符串 upcoming.titleString = titleString self.resultsTable.deselectRowAtIndexPath(indexPath,动画:真) }如何可以与加入到细胞而不是按钮执行SEGUE压在细胞上?谢谢你的帮助。 – user3700449

0

删除方法didSelectRowAtIndexPath并将segue连接到表视图单元格而不是视图控制器。

当选中一个单元格时,它将作为prepareForSegue方法中的参数sender传递。

一个侧面说明:不要在视图中执行后台任务 - 在cellForRowAtIndexPath方法 - ,做模型 - 数据源数组中的项目 - ,然后调用reloadData()

+0

谢谢Vadian – user3700449

相关问题