通过"正确"从UITableViewController中的选定单元格到ViewController

时间:2016-09-02 14:38:19

标签: swift uitableview segue

我有一个UITableviewController,我将JSON文件分解为各种对象,以便在tableview上显示(这样可以正常工作)。

我还创建了变量来存储tableview中生成的单元格中的某些信息,以传递给detailViewController(文本和图片)。

使用'准​​备segue'方法我能够将所需的信息传递给detailViewController。但是,我一直遇到一个问题,即detailViewController中显示的数据不是所选单元格的数据,而是表格中最后加载的单元格所显示的数据。

我没有使用didSelectRowAtIndexPath因为它似乎没有做得更好但是创建了一个额外的segue屏幕(自动)。

总之,我的TableViewController在屏幕上一次显示约4个单元格。无论我选择哪个单元格,传递给DetailViewController的信息始终是屏幕上显示的第四个单元格的信息。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Post Cell", forIndexPath: indexPath) as! TableViewCell

var dict = jsonArr[indexPath.row]
        cell.postTitle.text = dict["data"]!["post_title"] as? String
        cell.postTag.text = dict["data"]!["post_tags"] as? String
        cell.postAddress.text = dict["data"]!["post_address"] as? String

titleToPass = cell.postTitle.text
postTagToPass = cell.postTag.text
addressToPass = cell.postAddress.text



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

        if (segue.identifier == "ListToDetail") {


            let viewController = segue.destinationViewController as! DetailPostViewController

            viewController.passedTitle = titleToPass
            viewController.passedPostTags = postTagToPass
            viewController.passedAddress = addressToPass


            }
    }

1 个答案:

答案 0 :(得分:0)

每个单元格都会调用

cellForRowAtIndexPath,因此您的变量将始终具有与要更新的最后一个单元格匹配的值。

不是设置要在该方法中传递的数据,而是在indexPathForSelectedRow:中调用prepareForSegue并使用索引路径的行从jsonArr获取正确的内容。