xcode Swift:在dismissing ViewController2之后从ViewController1调用方法

cwxwcias  于 12个月前  发布在  Swift
关注(0)|答案(5)|浏览(157)

我目前正在构建一个家庭作业跟踪应用程序,你可以在一个TableView中添加课程。在一个ViewController中,我有一个已经存在的课程列表。我还有一个按钮,允许用户添加新课程。当他们点击按钮时,应用程序触发一个模态转换到一个新的ViewController,他们可以在那里填写一个表单来添加新课程。然而,当他们完成并单击取消当前ViewController的按钮以返回到课程列表时,我找不到一种方法来用用户刚刚添加的课程更新课程列表。我知道如果使用segue,您可以使用prepare方法。但是我正在调用

dismiss(animated: true, completion: nil)

字符串
我想调用的重载表的方法在第一个ViewController中。有没有办法在第二个ViewController关闭之前或之后调用第一个ViewController中的load方法?

j5fpnvbx

j5fpnvbx1#

根据您的要求,一个简单的“委托”将工作。
步骤1:定义协议。

protocol ViewController2Delegate: class {
func refresh()
}

字符串
步骤2:在ViewController 2上创建委托
第一个月
第三步:当你从一个按钮中使用“segue”从ViewController 1创建ViewController 2时,在ViewController 1中使用prepareForSegue方法并设置ViewController 1符合委托。ViewController 1将符合委托并重新加载表。
第四步:在ViewController 2中,点击doneButton,根据您的要求调用delegate?.refresh()(在关闭ViewController 2之前/之后-使用dismiss()方法的completionBlock)。

lb3vh1jj

lb3vh1jj2#

你可以在第一个视图控制器中使用viewWillappear函数来刷新,或者只使用完成处理程序,如下所示:
1)在第二个控制器中添加此变量。

var completion: (() -> Void)?

字符串
2)在第一个控制器中,在显示第二个控制器之前,您需要添加此代码。

let controller = secondController()
controller.completion = {
  // here you can refresh your first controller
}


3)在调用dismiss函数之前,在第二个控制器中进行刷新是最后一步。

if let completion = completion{
  completion()
}

zwghvu4y

zwghvu4y3#

您可以在ViewController1上的viewWillAppear中调用reloadData

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

字符串

ogq8wdun

ogq8wdun4#

您可以在FirstViewControllerviewWillAppear上执行loadDatarefreshData,如下所示:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    refresData()
}

字符串
FirstViewControllerviewWillAppear将在您调用从SecondViewController解除后立即调用。

xxhby3vn

xxhby3vn5#

你可以在第二个视图控制器中为第一个控制器使用委托,并在调用dismiss之前调用它。如果你想在dismiss之后运行,那么你可以在dismiss函数完成时调用它。

相关问题