我正在快速制作一个todolist应用程序。这是它的样子:
到目前为止,为了创建一个todo,我使用了一个alertController但是我更改了它,现在使用一个新的viewcontroller打开时点击“+”添加。当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“
答案 0 :(得分:0)
您需要一种方法将数据传递回包含表视图的视图控制器。这可以通过多种方式实现,例如使用委托模式。
实现这一目标的一种更简单的方法是使用闭包,如下所示:
在包含表视图的视图控制器中:
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")
希望这有帮助!