我正在快速制作一个 todolist 应用程序。这是它的样子:
到目前为止,为了创建一个todo,我使用了一个alertController,但我改变了它,现在当点击“+”添加时使用一个新的视图控制器打开。当 ViewController 打开时,我填写标题,然后单击一个按钮。在单击按钮上,我希望它在 tableViewController 中添加一个新行,标题是我放在 viewController 的 textField 中。我无法在 tableViewController 中创建的新行中传递 textField 的值。任何人都可以提供一些帮助吗?
[编辑] 这是我的 addTodoController :
var updateTableViewClosure: ((String) -> Void)?
@IBAction func AddButton(_ sender: Any) {
var todoValue = titleField.text
updateTableViewClosure?(todoValue!)
}
@IBOutlet weak var titleField: UITextField!
这是我的 tableviewcontroller :
if segue.identifier == "CreateAdd" {
let addItemViewController = segue.destination as! CreateAdd
addItemViewController.updateTableViewClosure = {
newItem in myItems(title: todoValue, content:"hello", ontent: "Ceci est le contenu" , startDate: "16/08/1997", author: "Clem")
}
}
我收到一个错误:
" 使用未解决的 "todoValue"
您需要一种将数据传递回包含表视图的视图控制器的方法。这可以通过多种方式实现,例如使用委托模式。
实现这一点的一种更简单的方法是使用闭包,如下所示:
在包含表视图的视图控制器中:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "identifier" {
let addItemViewController = segue.destination as! AddItemViewController
addItemViewController.updateTableViewClosure = {
newItem in
// Add the new item to your data source and reload your table view.
}
}
}
在AddItemViewController
添加一个名为新的变量updateTableViewClosure
,这将是你的闭合:
var updateTableViewClosure: (String -> Void)?
并在任何你想要的地方调用它:
updateTableViewClosure?("The new item")
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句