我正在尝试将listView选择的所选索引号从一个ViewController传递到另一个ViewController,但遇到问题时,tableView didSelectRowAtIndexPath委托比prepareForSegue函数稍晚运行。
基本上,在didSelectRowAtIndexPath中,我选择了变量,然后在prepareForSegue中获取变量。问题是prepareForSegue似乎运行了第二个选择单元格并且在调用didSelectRowAtIndexPath函数之前,因此我的变量没有被传递。
我的主要代码是:
tableView didSelectRowAtIndexPath委托,设置'selectedResult'......
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
selectedResult = indexPath.item
txtNameSearch.resignFirstResponder() //get rid of keyboard when table touched.
println("saved result")
//tableView.deselectRowAtIndexPath(indexPath, animated: false)
//var tappedItem: ToDoItem = self.toDoItems.objectAtIndex(indexPath.row) as ToDoItem
//tappedItem.completed = !tappedItem.completed
//tableView.reloadData()
}
prepareForSegue函数,它将变量作为'toPass'发送到另一个ViewController('detailViewController'):
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!){
if (segue.identifier == "detailSeque") {
println("preparing")
var svc = segue!.destinationViewController as detailViewController
svc.toPass = selectedResult
//println(tableView.indexPathsForSelectedRows().
//svc.toPass = tableView.indexPathForSelectedRow()
}
}
提前致谢
答案 0 :(得分:11)
如果您在ViewController
的桌面视频中有一个插座,则可以在indexPathForSelectedRow
中拨打prepareForSegue
。
如果您的ViewController
是UITableViewController
的子类,那么您可以这样做:
let row = self.tableView.indexPathForSelectedRow().row
println("row \(row) was selected")
如果您的ViewController
不是UITableViewController
的子类,请在视图控制器中为IBOutlet
设置UITableView
:
@IBOutlet var tableView: UITableView!
并在Interface Builder中连接并从prepareForSegue
调用它,如上所示。
答案 1 :(得分:0)
在设置performSegueWithIdentifier
之后,为什么不尝试以编程方式在didSelectRowAtIndexPath
方法中调用selectedResult
,而不是直接从故事板操作触发您的segue?