繁体   English   中英

Swift在视图之间传递数据

[英]Swift passing data between views

我正在开发一个Swift应用程序,我遇到了一个有点奇怪的问题。 我对Swift和iOS开发都很​​陌生,所以我想我可能不是这样做的正确方法。

我有一个UITableView,我能够毫无问题地读取所选单元格的内容:

override func tableView(_ tableView: UITableView, didSelectRowAt 
indexPath: IndexPath) {
    let cell = self.tableView.cellForRow(at: indexPath)
    selectedItem = (cell?.textLabel?.text)!
}

我在我的班级顶部设置了一个变量,如下所示:

var selectedItem: String = String()

然后我使用seque准备seque到新的页面/视图并传入所选的数据:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetails"
    {
        if let destinationVC = segue.destination as? ItemDetails {
            destinationVC.detailsToDisplay = selectedItem
        }
    }
}

问题是虽然数据确实在视图之间传递并出现在UI中,但它不是最新的数据。 例如,当我运行代码并选择项目时,第一次没有任何内容,但是如果我单击后退按钮,再次选择该项目,这次它确实出现在下一个视图中。 在UI中的后续选择中,它会导航到下一个视图,但在我选择另一个项目之前不会更新文本。

在我看来,它几乎就像没有像我期望和传递的那样在每个选择上设置selectedItem变量,而是在UI中的后续选择中,它被更新。

我如何让它每次都传递实际正确的项目,而不是前一个或根本没有(这是第一次运行时发生的事情)。

谢谢!

你在索引的didSelectRow之前调用你的segue

改变代码如下

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetails"
    {
        if let destinationVC = segue.destination as? ItemDetails {



let cell = tableView.cellForRowAtIndexPath(self.tableView.indexPathForSelectedRow!) as UITableViewCell

destinationVC.detailsToDisplay = (cell.textlabel?.text)!

        }
    }
}

如果要在控制器之间传递数据,可以创建在类上方声明的全局变量。 将结果存储在该全局变量中。

例如,

在ViewController类中:

var result:String!
class ViewController:UIViewController{
result = // your data }

在SecondViewController类中:

class SecondViewController:UIViewController{
var fetch = result
if(fetch != result){
print("Got the value")
}
else
{
print("Null value")
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM