【问题标题】:How to transfer data from table cell to a new view controller using prepare for segue method?如何使用 prepare for segue 方法将数据从表格单元格传输到新的视图控制器?
【发布时间】:2015-11-16 08:36:39
【问题描述】:

当我选择单元格时,如何使用prepare for segue将图像(tweetImg)和日期(dateLbl)从tablecell(mainCell)传输到Newviewcontroller?就我而言,我使用 parse.com 作为后端来检索图像和日期数据。我是编程新手,希望能得到一些帮助,谢谢。

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

}

【问题讨论】:

    标签: parse-platform swift2 segue


    【解决方案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
    }
    

    【讨论】:

    • @Dimuth Lasantha 这是我所做的并且它起作用了:覆盖 func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { letcoming: NewViewController = segue.destinationViewController as! NewViewController 让 indexPath = self.resultsTable.indexPathForSelectedRow! let titleString = self.resultsStartdateArray[indexPath.row] as Stringcoming.titleString = titleString self.resultsTable.deselectRowAtIndexPath(indexPath, animated: true) } 如何使用添加到单元格的按钮而不是按下单元格来执行转场?感谢您的帮助。
    【解决方案2】:

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

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

    附注:不要在视图中执行后台任务——cellForRowAtIndexPath 方法——,在模型中执行——数据源数组中的项目——然后调用reloadData()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多