用户在视图控制器中调用模态.当在模态上调用self.dismissViewController时,需要在初始视图控制器上运行函数.此函数还需要从模态传递的变量.
此模式可以从多个视图控制器中显示,因此无法在模态视图的viewDidDisappear中直接调用该函数.
怎么能迅速完成?
怎么样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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
在模态中:
class ModalViewController: UIViewController {
  var callbackAction: Action?
   override func viewDidDisappear(_ animated: Bool) {
    let x = … // the x is what you pass to ViewController
    callbackAction?(x)
  }
}
Run Code Online (Sandbox Code Playgroud)
当然,当你表现出ModalViewController需要设置callbackAction这样modal.callbackAction = modalAction()的ViewController
提问者(Michael Voccola)提供和选择的答案对我不起作用,所以我想提供另一个答案选项.他的回答对我不起作用,因为当我解除模态视图时,viewDidAppear似乎没有运行.
我有一个表和一个模态VC出现并采取一些表输入.我发送初始VC模态的新变量信息没有问题.但是,在解除模态视图时,我无法让表自动运行tableView.reloadData函数.
对我有用的答案在上面的评论中:
您可能希望使用模式上的展开segue来执行此操作,这样您就可以在展开时调用父函数.stackoverflow.com/questions/12561735/... - porglezomp于2014年12月15日3:41
如果您只需要展开一步(VC2到VC1),您只需要一个给定答案的片段:
第1步:在VC1代码中插入方法
执行展开segue时,需要指定一个动作,该动作是要放松到的视图控制器的动作方法:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
    //Insert function to be run upon dismiss of VC2
}
Run Code Online (Sandbox Code Playgroud)
步骤2:在故事板中,在显示的VC2中,从按钮拖动到退出图标并选择"unwindToThisViewController"
添加操作方法后,您可以通过控制拖动到"退出"图标来定义故事板中的展开segue.
就是这样.这两个步骤对我有用.现在当我的模态视图被解雇时,我的表格会更新.刚想我会添加这个,以防其他人的问题没有被所选答案解决.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           9373 次  |  
        
|   最近记录:  |