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

编程入门 行业动态 更新时间:2024-10-09 08:26:07
本文介绍了基于 Swift 中的列表选择在 ViewControllers 之间传递值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我正在尝试将 listView 选择的选定索引号从一个 ViewController 传递到另一个,但我遇到了 tableView didSelectRowAtIndexPath 委托比 prepareForSegue 函数运行稍晚的问题.

I'm trying to pass the selected index number of a listView selection from one ViewController to another but am running into an issue with the tableView didSelectRowAtIndexPath delegate runs slightly later than the prepareForSegue function.

基本上,在didSelectRowAtIndexPath 中,我设置了一个变量,然后在prepareForSegue 中选取该变量.问题是 prepareForSegue 似乎在选择单元格的第二个时间运行,并且在调用 didSelectRowAtIndexPath 函数之前运行,所以我的变量没有被传递.

Basically, in didSelectRowAtIndexPath, I seta variable, which is then picked up in the prepareForSegue. The issue is that prepareForSegue seems to run the second that the cell is selected and before the didSelectRowAtIndexPath function is called so my variable is not passed.

我的主要代码是:

tableView didSelectRowAtIndexPath 委托,它设置了 'selectedResult'...

tableView didSelectRowAtIndexPath delegate, which sets '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
    //tappedItempleted = !tappedItempleted
    //tableView.reloadData()

}

prepareForSegue 函数将变量作为 'toPass' 发送到另一个 ViewController('detailViewController'):

prepareForSegue function which sends the variable as 'toPass' to the other 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()

    }
}

提前致谢

推荐答案

如果你的 ViewController 中有一个 tableView 的插座,你可以在 indexPathForSelectedRow 中调用 indexPathForSelectedRow代码>prepareForSegue.

If you have an outlet to your tableView in your ViewController, you can just call indexPathForSelectedRow in prepareForSegue.

如果你的 ViewControllerUITableViewController 的子类,那么你可以这样做:

If your ViewController is a subclass of UITableViewController, then you can do:

    let row = self.tableView.indexPathForSelectedRow().row
    println("row \(row) was selected")

如果您的 ViewController 不是 UITableViewController 的子类,请在您的 UITableView 中设置一个 IBOutlet视图控制器:

If your ViewController is not a subclass of UITableViewController, set up an IBOutlet to the UITableView in your view controller:

@IBOutlet var tableView: UITableView!

并将其连接到 Interface Builder 中,然后从 prepareForSegue 调用它,如上所示.

and wire that up in Interface Builder and call it from prepareForSegue as show above.

这篇关于基于 Swift 中的列表选择在 ViewControllers 之间传递值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-05-01 11:11:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1408625.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:列表   Swift   ViewControllers

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!