[英]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.