返回最后一个屏幕时,如何在控制器之间传输数据?迅速



在应用程序中,我被要求选择一个类别,当我单击时,我从tableview移动到下一个屏幕,当我单击所需的类别时,应保存它然后返回到上一个控制器,其中我选择的类别不是"选择类别"。

i使用此方法navigationController?.popViewController(animated: true),这使我回到了最后一个屏幕。据我了解,准备就绪,但由于我确切地知道要去的地方,因此我可以在称为pop的方法中……,访问我要切换的控制器并通过特性?但是如何?

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  let currentCell = categories[indexPath.row]
    /?
    /?
  navigationController?.popViewController(animated: true)
}

进入选择屏幕时

let vc = ///
vc.delegate = self
// push

然后在didASelectRowAt

class CategoryViewController:UIViewController {
 weak var delegate:PreviousVC?
 ////
}
delegate?.sendData(someData)
navigationController?.popViewController(animated: true)

didASelectRowAt内的另一个选项

// access previous vc
let previousVC = self.navigationController!.viewControllers[self.navigationController!.viewControllers.count - 2] as! PreviousVc
previousVC.sendData(someData)
// pop here

编辑: FirstVC

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let secondVC = segue.destination as? SecondViewController {
          secondVC.delegate = self   
        }
    }

您可以使用CLOSURE

将所选类别传递给上一个视图控制器
class FirstViewController: UIViewController {   
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let secondVC = segue.destination as? SecondViewController {
            secondVC.selectedOption = { selectedOption in
                print(selectedOption)
                //change category title here
            }
        }
    }
}
class SecondViewController: UIViewController {
    var selectedOption: ((String) -> Void)?
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedOption?("Selected Option String")
        navigationController?.popViewController(animated: true)
    }
}

也许当您移动到类别选择控制器(例如

(时,您应该通过"完成处理程序"
(String)->(Void)

当您弹出时,将您的类别通过此Clouser

相关内容

  • 没有找到相关文章

最新更新