基于Swift中的列表选择在ViewControllers之间传递值

Oli*_*cer 2 tableview viewcontroller segue swift

我正在尝试将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()

}
Run Code Online (Sandbox Code Playgroud)

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()

    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

vac*_*ama 11

如果您在具有出口到您的tableView ViewController,你可以调用indexPathForSelectedRowprepareForSegue.

如果你ViewController是你的子类UITableViewController,你可以这样做:

    let row = self.tableView.indexPathForSelectedRow().row
    println("row \(row) was selected")
Run Code Online (Sandbox Code Playgroud)

如果你ViewController是不是类的子类UITableViewController,建立一个IBOutletUITableView您的视图控制器:

@IBOutlet var tableView: UITableView!
Run Code Online (Sandbox Code Playgroud)

然后在Interface Builder中连接并从prepareForSegue上面的show中调用它.