swift 3使用ViewController中的textField向TableViewController添加行

时间:2017-07-08 12:09:56

标签: uitableview swift3 uiviewcontroller

我正在快速制作一个todolist应用程序。这是它的样子:

enter image description here

到目前为止,为了创建一个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“

1 个答案:

答案 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")

希望这有帮助!