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