我試圖解除模態視圖並返回到「發送」的視圖控制器,同時保留在模態視圖中輸入的數據。如果我理解正確,我需要爲此使用委託人/協議,但是在這種情況下,我很難理解如何實際執行它。解除模態視圖但保留數據
基本上是一個用戶可以調用模態的視圖,進入文本字段的一些信息,而當他們點擊保存這個函數被調用:
func handleSave() {
guard let newProductUrl = NSURL(string: urlTextField.text!) else {
print("error getting text from product url field")
return
}
guard let newProductName = self.nameTextField.text else {
print("error getting text from product name field")
return
}
guard let newProductImage = self.logoTextField.text else {
print("error getting text from product logo field")
return
}
// Call save function in view controller to save new product to core data
self.productController?.save(name: newProductName, url: newProductUrl as URL, image: newProductImage)
// Present reloaded view controller with new product added
let cc = UINavigationController()
let pController = ProductController()
productController = pController
cc.viewControllers = [pController]
present(cc, animated: true, completion: nil)
}
它調用self.productController?.save
功能的新輸入的值保存到核心數據,並用新產品重新加載productController
表格視圖。
但是我遇到的問題是productController
表視圖是根據其他因素動態設置的,所以我只想在用戶輸入數據後關閉模態視圖並返回到頁面模態視圖被調用。
編輯:嘗試在理解如何實現委託 -
ProductController的是,用戶得到的模態視圖從父類:
protocol ProductControllerDelegate: class {
func getData(sender: ProductController)
}
class ProductController: UITableViewController, NSFetchedResultsControllerDelegate, WKNavigationDelegate {
override func viewDidLoad() {
super.viewDidLoad()
weak var delegate:ProductControllerDelegate?
}
func getData(sender: ProductController) {
}
而且AddProductController是模態呈現控制器,其中用戶輸入數據然後handleSave
被調用,我想解僱並返回到ProductController的tableview,它被稱爲:
class AddProductController: UIViewController, ProductControllerDelegate {
override func viewDidDisappear(_ animated: Bool) {
// error on this line
getData(sender: productController)
}
謝謝瓊我現在正在嘗試 - 我應該在父視圖控制器(ProductController)或模式控制器(AddProductController)中創建協議? – d0xi45
我想將'handleSave'中收集的數據傳遞給父級(ProductController),我可以傳遞一個完整的函數嗎?我的印象是'handleSave'將用戶輸入的數據傳遞到核心數據,然後ProductController正在從核心數據讀取 – d0xi45
@ d0xi45您必須在AddProductController中聲明協議,但在ProductController中實現它,請檢查我之前發佈的鏈接。我不知道你的意思是傳遞一個完整的函數,它的工作方式是調用其他函數。 –