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

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延迟到更新变量之前,或者如何才能成功地将所选行无延迟地传递到下一个视图?

最佳答案

一种可能性:不要实现didSelectRowAtIndexPath:。只需将该功能移到您的prepareForSegue实现中即可。毕竟,这就是您轻按单元格时首先要调用的内容。即使在prepareForSegue中,您也可以询问表视图选择了哪一行。

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

10-08 17:46