Ios Swift:在解除ViewController2后从ViewController1调用方法

Ios Swift:在解除ViewController2后从ViewController1调用方法,ios,swift,xcode,segue,dismissviewcontroller,Ios,Swift,Xcode,Segue,Dismissviewcontroller,我目前正在开发一个家庭作业跟踪应用程序,您可以在TableView中添加课程。在一个ViewController中,我有一个已经存在的课程列表。我还有一个按钮,允许用户添加新课程。当他们点击按钮时,应用程序会触发一个模式序列到一个新的ViewController,在那里他们可以填写一张表格来添加一个新的课程。但是,当他们完成并单击关闭当前ViewController的按钮返回课程列表时,我找不到用用户刚刚添加的课程更新课程列表的方法。我知道如果使用segue,可以使用prepare方法。不管我怎

我目前正在开发一个家庭作业跟踪应用程序,您可以在TableView中添加课程。在一个ViewController中,我有一个已经存在的课程列表。我还有一个按钮,允许用户添加新课程。当他们点击按钮时,应用程序会触发一个模式序列到一个新的ViewController,在那里他们可以填写一张表格来添加一个新的课程。但是,当他们完成并单击关闭当前ViewController的按钮返回课程列表时,我找不到用用户刚刚添加的课程更新课程列表的方法。我知道如果使用segue,可以使用prepare方法。不管我怎么打电话

 dismiss(animated: true, completion: nil)

为了重新加载表,我要调用的方法位于第一个ViewController中。是否有方法在第二个ViewController解除之前或之后在第一个ViewController中调用load方法?

您可以在ViewController1上调用ViewWillLoadData

override func viewWillAppear(_ animated: Bool) {
        tableview.reloadData() 
}

您可以在
FirstViewController
view上执行
loadData
refreshData
,如下所示:

覆盖函数视图将出现(u动画:Bool){
超级。视图将显示(动画)
refresData()
}

FirstViewController
视图将在您从
SecondViewController
调用dismise后立即出现

您可以为第二视图控制器中的第一个控制器使用代理,并在调用dismise之前调用它。如果要在解雇后运行,则可以在完成解雇功能时调用它。

根据您的要求,简单的“委派”即可

if let completion = completion{
  completion()
}
步骤1:定义协议

protocol ViewController2Delegate: class {
func refresh()
}
步骤2:在ViewController2创建委派

弱var委托:ViewController2Delegate?

步骤3:当您使用按钮中的“segue”从ViewController1创建ViewController2时,使用ViewController1中的
prepareforsgue
方法,并设置ViewController1符合代理。ViewController1将符合委托并重新加载表


步骤4:在ViewController2中,点击doneButton,根据需要调用
delegate?.refresh()
(解除ViewController2之前/之后-使用Disclease()方法的completionBlock)。

您可以在第一个视图控制器中使用ViewWillAspect函数进行刷新,或者只使用完成处理程序作为下一步:

1) 在第二个控制器中添加此变量

var completion: (() -> Void)?
2) 在第一个控制器中,在显示第二个控制器之前,您需要添加此代码

let controller = secondController()
controller.completion = {
  // here you can refresh your first controller
}
3) 在调用dismise函数之前,在第二个控制器中进行刷新是最后一步

if let completion = completion{
  completion()
}

谢谢对于任何想知道的人来说,我决定不使用segue来实现它,所以当我想展示新的ViewController时,我就是这么做的:让addCourseViewController=self.storyboard?.instanceeviewcontroller(标识符为:“addCourseViewController”)为!AddCourseViewController AddCourseViewController.delegate=self-self.present(AddCourseViewController,动画:true,完成:nil)记住,这样做,您必须设置故事板ID。在Swift中,本机回调闭包比objective-c-ish协议/Delegated更可取步骤3的更简单语法是
completion?()
(没有
if let
包装器)