我正在使用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准备设置到新页面/视图并传入所选数据:
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中的后续选择中,它被更新。
我如何让它每次传递实际正确的项目,而不是前一项或根本没有(这是第一次运行时发生的事情)。
谢谢!
答案 0 :(得分:0)
在索引
的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)!
}
}
}
答案 1 :(得分:0)
如果要在控制器之间传递数据,可以创建在类上方声明的全局变量。将结果存储在该全局变量中。
例如,
在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")
}