这是我的问题。
我有ViewController
A(让我们只调用它A
)。
我从A
推送到B
,这是自定义相机控制器。
当我拍照时,我呈现模态控制器C
,它有两个按钮,一个用于确认,一个用于返回。
如果点击后退按钮,它将返回B
控制器。
如果点击了确认按钮,C
应该触发委托方法A
,然后解除C
和B
,但没有动画,因此忽略{{1}不会被注意到。
问题:
1.如何实现上述方案? B
需要委派给A
,那么如何做到这一点?我也应该使用展开吗?
提醒:A - >推 - > B - >模态 - > C
答案 0 :(得分:3)
我认为只需将B的参考传递给C控制器
就可以实现相同的功能控制器B代码
class BViewController: UIViewController {
weak var controllerA : ViewController!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func confirmEventCallFromC() {
self.navigationController?.popViewController(animated: false)
}
@IBAction func btnClick(_ sender: Any) {
self.performSegue(withIdentifier: "CVC", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "CVC" {
let vc = segue.destination as! CViewController
vc.controllerB = self
}
}
}
Controller C Code就像这样
class CViewController: UIViewController {
weak var controllerB : BViewController!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func confirmBtnClick(_ sender: Any) {
controllerB.confirmEventCallFromC()
self.dismiss(animated: true, completion: nil)
}
}
我希望这会对你有所帮助。
答案 1 :(得分:2)
您可以使用UnwindSegue,
您可以将VC A中的方法声明为
@IBAction func unWindToVCA(segue : UIStoryboardSegue) {
}
在VC C故事板中,您可以控制从viewController拖动到退出,并且您将弹出一个弹出窗口,其中包含您之前声明的所有展开segue的列表。选择unWindToVCA。
现在选择segue并为其分配一个可重复使用的标识符,如下图所示:)
最后,只要您想返回VC1,请致电
self.performSegue(withIdentifier: "backToVC1", sender: nil)
现在在VCA中,您可以使用
从VC C获取数据@IBAction func unWindToVCA(segue : UIStoryboardSegue) {
let c = segue.source
//access c's data and update A
}
我也遵循了VC的等级制度 VC A - >推VC B - >模态 - > VC C