如何在segue之前更新选定的行?

时间:2015-12-05 18:18:16

标签: ios swift tableview

我需要将包含一个视图中所选行的索引的变量传递给下一个视图。

firstview.swift

var selectedRow = 0;

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        selectedRow = indexPath.row + 1
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if (segue.identifier == "viewAssignmentsSegue") {
            let navController = segue.destinationViewController as! UINavigationController
            let controller = navController.viewControllers[0] as! AssignmentsViewController
            print(selectedRow)
            controller.activeCourse = selectedRow
        }
    }

我的问题是,当选择一行时,selectedRow方法在segue发生之前不会更新tableView方法,这意味着该值基本上总是落后于它是。如何在更新变量之前延迟prepareForSegue,或者如何在没有延迟的情况下成功将所选行传递到下一个视图?

3 个答案:

答案 0 :(得分:1)

一种可能性:不要实施didSelectRowAtIndexPath:。只需将该功能移至prepareForSegue实施中即可。毕竟,这是响应你敲击细胞的第一个叫做。即使在prepareForSegue中,您也可以询问表格查看选择了哪一行。

另一种可能性:实施willSelectRowAtIndexPath:而不是didSelectRowAtIndexPath:。它发生得更早。

答案 1 :(得分:0)

在你的prepareForSegue中:

 controller.activeCourse = self.tableView.indexPathForSelectedRow
不要等待调用didSelect - 提前做出反应。

答案 2 :(得分:0)

在prepareForSegue上使用它:

        let path = self.tableView.indexPathForSelectedRow()!
        controller.activeCourse = path.row

        let path = self.tableView.indexPathForCell(sender)
        controller.activeCourse = path.row