我需要将包含一个视图中所选行的索引的变量传递给下一个视图。
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,或者如何在没有延迟的情况下成功将所选行传递到下一个视图?
答案 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