![](/img/trans.png)
[英]How to append list and reload tableView in viewcontroller2 from viewcontroller1 (Swift)
[英]Swift: Call a method from ViewController1 after dismissing ViewController2
我目前正在構建一個家庭作業跟蹤應用程序,您可以在其中在 TableView 中添加課程。 在一個 ViewController 中,我有一個已經存在的課程列表。 我還有一個按鈕,允許用戶添加新課程。 當他們單擊按鈕時,應用程序會觸發模態搜索到新的 ViewController,他們可以在其中填寫表單以添加新課程。 但是,當他們完成並單擊將當前 ViewController 關閉到 go 的按鈕返回課程列表時,我找不到使用用戶剛剛添加的課程更新課程列表的方法。 我知道如果使用 segue,您可以使用 prepare 方法。 不過我打電話
dismiss(animated: true, completion: nil)
我要調用以重新加載表的方法位於第一個 ViewController 中。 有沒有辦法在第二個 ViewController 關閉之前或之后調用第一個 ViewController 中的 load 方法?
根據您的要求,一個簡單的“委托”將起作用。
第 1 步:定義協議。
protocol ViewController2Delegate: class {
func refresh()
}
Step2:在 ViewController2 創建一個委托
weak var delegation: ViewController2Delegate?
步驟 3:當您使用按鈕中的“segue”從 ViewController1 創建 ViewController2 時,使用 ViewController1 中的prepareForSegue
方法並設置 ViewController1 符合委托。 ViewController1 將符合委托並重新加載表。
第4步:在ViewController2中,點擊doneButton,根據您的要求調用delegate?.refresh()
(在關閉viewcontroller2之前/關閉viewcontroller2之后-使用dismiss()方法的completionBlock)。
您可以在第一個視圖 controller 中使用 viewWillappear function 來刷新或僅使用完成處理程序如下:
1) 在第二個 controller 添加這個變量。
var completion: (() -> Void)?
2) 在第一個 controller 顯示第二個 controller 之前,您需要添加此代碼。
let controller = secondController()
controller.completion = {
// here you can refresh your first controller
}
3)在此處進行刷新是您在調用駁回 function 之前需要在第二個 controller 中執行的最后一步。
if let completion = completion{
completion()
}
您可以在 ViewController1 上的 viewWillAppear 中調用 reloadData
override func viewWillAppear(_ animated: Bool) {
tableview.reloadData()
}
您可以在FirstViewController
的viewWillAppear
上執行loadData
或refreshData
,如下所示:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
refresData()
}
FirstViewController
的viewWillAppear
將在您調用以從SecondViewController
中關閉后立即調用。
您可以在第二個視圖 controller 中為第一個 controller 使用委托,並在調用解雇之前調用它。 如果要在dismiss后運行,那么可以在dismiss完成后調用它function。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.