在新的UIView中获取点击UITableViewCell的对象?

从UITableViewCell中的单元格向新的视图传递参数数据的正确方法是什么?

我从我的UITableViewCell中的原型单元格中指定了一个segue,它将它链接到一个新的UIVIew并设置为show (aka push) 。 新的UIView显示,但我不知道如何告诉UIView选定的部分/行或告诉它关于与该select相关联的对象。

我的代码的删节版本如下所示:

 class MyTableViewController : UITableViewController { // other code omitted override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let files = filesByDate[filesByDateKeys![indexPath.section]] self.selectedFile = files![indexPath.row] } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "SegueToFileDetails") { let destinationViewController = segue.destinationViewController as! FileDetailsViewController destinationViewController.file = self.selectedFile } } } class FileDetailsViewController : UIViewController { var file: NSURL override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) print("File: ", file) } } 

我发现tableView()函数在prepareForSegue()函数后面调用,导致在调用viewWillAppear()时文件属性为nil。

另外一个search引起了另一个post ,这表明了正确的做法。 我的问题中的tableView()函数是不需要的。 相反(在Swift 2中):

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "SegueToFileDetails") { let destinationViewController = segue.destinationViewController as! FileDetailsViewController let path = self.tableView.indexPathForSelectedRow let files = filesByDate[filesByDateKeys![path!.section]] destinationViewController.file = files![path!.row] } } 

如果你想简单地根据特定的目的地类别做行为,根据另一个build议:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if let destinationViewController = segue.destinationViewController as? FileDetailsViewController { let path = self.tableView.indexPathForSelectedRow let files = filesByDate[filesByDateKeys![path!.section]] destinationViewController.file = files![path!.row] } }