gpt4 book ai didi

swift - 在没有 segue 的情况下将数据传递给 Swift 中的 ViewController

转载 作者:行者123 更新时间:2023-11-28 11:43:31 25 4
gpt4 key购买 nike

我有两个 Controller 。一个只是一个 Popover Frame。它是一个透明背景的小矩形。

我在第二个 Controller 中有一个 Tableview,我想通过在我的第二个 Controller 中选择一个 TableView Raw 来更改我的第一个 Controller 中的 TextField。

这可能吗?这是我的第一个 Controller 的方法,它将创建第二个 Controller/CategoryViewController:

@IBAction func showCategoryPopup(_ sender: Any) {
let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "categoryVC") as! CategoryViewController
self.addChild(popOverVC)
popOverVC.view.frame = self.view.frame
self.view.addSubview(popOverVC.view)
popOverVC.didMove(toParent: self)
}

这是将在我的第二个 Controller 中创建 Popover 的方法:

func showAnimate() {
self.view.transform = CGAffineTransform.init(scaleX: 1.3,y:1.3)
self.view.alpha = 0.0
UIView.animate(withDuration: 0.25) {
self.view.alpha = 1.0
self.view.transform = CGAffineTransform.init(scaleX: 1.0,y:1.0)
}
}

func removeAnimate() {
UIView.animate(withDuration: 0.25, animations: {
self.view.transform = CGAffineTransform.init(scaleX: 1.3,y:1.3)
self.view.alpha = 0.0
}) { (finished: Bool) in
if(finished) {
self.view.removeFromSuperview()
}
}
}

如何从第二个 Controller 调用我的第一个 Controller ?我试过这种方式:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print(indexPath.row)

// let myVC = storyboard?.instantiateViewController(withIdentifier: "changeBalanceCtrl") as! ChangeBalanceViewController

let firstVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "changeBalanceCtrl") as! ChangeBalanceViewController


firstVC.changeBalanceTextField.text! = "TEST"

}

我认为问题在于第一个 Controller changeBalanceTextField.text 为 nil。我检查了“self”参数,得到了两个不同的对象。所以我认为我用第二个 Controller 构建的第一个 Controller 是不同的。

最佳答案

您对 TableView 委托(delegate)中的 instantiateViewController(withIdentifier:) 所做的是创建 ChangeBalanceViewController 的新实例。要访问第二个 View Controller 的实际父级,您需要在第二个 View Controller 中使用 self.parent

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let firstVC = self.parent as? ChangeBalanceViewController {
firstVC.changeBalanceTextField.text = "TEST"
}
}

关于swift - 在没有 segue 的情况下将数据传递给 Swift 中的 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53019671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com