用户位于视图控制器中,该控制器调用模态。当在模态上调用self.dismissViewController时,需要在初始视图控制器上运行函数。此函数还需要从模态传递的变量。
此模式可以从多个视图控制器中显示,因此无法在模态视图的viewDidDisappear中直接调用该函数。
如何在swift中实现这一目标?
答案 0 :(得分:6)
delegate
怎么样?
或者你可以像这样ViewController
:
typealias Action = (x: AnyObject) -> () // replace AnyObject to what you need
class ViewController: UIViewController {
func modalAction() -> Action {
return { [unowned self] x in
// the x is what you want to passed by the modal viewcontroller
// now you got it
}
}
}
以模态:
class ModalViewController: UIViewController {
var callbackAction: Action?
override func viewDidDisappear(_ animated: Bool) {
let x = … // the x is what you pass to ViewController
callbackAction?(x)
}
}
当然,当您显示ModalViewController
需要在callbackAction
modal.callbackAction = modalAction()
这样的ViewController
时
答案 1 :(得分:6)
提问者(Michael Voccola)提供和选择的答案对我没有用,所以我想提供另一个答案选项。他的回答对我没有用,因为当我解除模态视图时,viewDidAppear似乎没有运行。
我有一个表和一个模态VC出现并需要一些表输入。我发送初始VC模态的新变量信息没有问题。但是,在解除模态视图时,我无法让表自动运行tableView.reloadData函数。
对我有用的答案在上面的评论中:
您可能希望使用模态上的展开segue来执行此操作 你可以在它被调用的父项上设置一个函数 解开。 stackoverflow.com/questions/12561735 / ... - porglezomp 12月15日 ' 14在3:41
如果您只是展开一步(VC2到VC1),您只需要一个给定答案的片段:
第1步:在VC1代码中插入方法
执行展开segue时,需要指定一个动作 是要放松到的视图控制器的操作方法:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
//Insert function to be run upon dismiss of VC2
}
第2步:在故事板中,在显示的VC2中,从按钮拖动到退出图标,然后选择" unwindToThisViewController"
添加操作方法后,您可以定义展开 通过控制拖动到“退出”图标来在故事板中进行segue。
就是这样。这两个步骤对我有用。现在当我的模态视图被解雇时,我的表格会更新。我只是想加上这个,以防其他人的问题没有被所选答案解决。
答案 2 :(得分:4)
通过将模态视图控制器中的全局变量设置为布尔值,我能够实现所需的结果。该变量是从一个单独的类中的结构启动并可用的。
当模态被解除时,初始视图控制器上的viewDidAppear方法会相应地响应全局变量的值,并在需要时翻转全局变量的值。
我不确定这是否是从性能角度来看最有效的方式,但它在我的场景中完美运行。