我有两个控制器。一个只是一个弹出框。它是一个带有透明背景的小矩形。
我在第二个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()
}
}
}
如何从第二个控制器呼叫我的第一个控制器?我尝试过这种方式:
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。 我检查了“自我”参数,然后得到了两个不同的对象。因此,我认为与第二个Controller一起构建的第一个Controller是不同的控制器。
答案 0 :(得分:2)
在表视图委托中使用instantiateViewController(withIdentifier:)
的操作是创建ChangeBalanceViewController的新实例。要访问第二个视图控制器的实际父级,您需要在第二个视图控制器中使用self.parent
。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let firstVC = self.parent as? ChangeBalanceViewController {
firstVC.changeBalanceTextField.text = "TEST"
}
}