我试图解除模态视图并返回到“发送”的视图控制器,同时保留在模态视图中输入的数据。如果我理解正确,我需要为此使用委托人/协议,但是在这种情况下,我很难理解如何实际执行它。解除模态视图但保留数据
基本上是一个用户可以调用模态的视图,进入文本字段的一些信息,而当他们点击保存这个函数被调用:
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中实现它,请检查我之前发布的链接。我不知道你的意思是传递一个完整的函数,它的工作方式是调用其他函数。 –