【问题标题】:swift 3 add row to TableViewController using textField from ViewControllerswift 3 使用 ViewController 中的 textField 将行添加到 TableViewController
【发布时间】:2017-07-08 12:09:55
【问题描述】:

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

到目前为止,为了创建一个待办事项,我使用了一个 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!

这是我的表格视图控制器:

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"

【问题讨论】:

    标签: uitableview swift3 uiviewcontroller


    【解决方案1】:

    您需要一种将数据传回包含表视图的视图控制器的方法。这可以通过多种方式实现,例如使用委托模式。

    一种更简单的实现方法是使用闭包,如下所示:

    在包含表格视图的视图控制器中:

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

    希望这会有所帮助!

    【讨论】:

    • 您好,谢谢您的回答!但我不明白 textField 值将如何获取并添加到 TableViewController 新行中?
    • 您可以通过添加一个按钮来做到这一点,例如,在该按钮的 IBAction 中,从 textfeild 获取文本并调用 updateTableViewClosure。您也可以通过将视图控制器设置为文本字段的委托,并实现 textFieldShouldReturn 委托方法来做到这一点。
    • 这实际上是我遇到的麻烦,如何在 tableViewController 中访问我的 textField 的 viewController 的文本?
    • 你需要反方向思考一下,如何根据文本域中输入的文本更新表格视图?这就是我在回答中解释的内容。
    • updateTableViewClosure?("the New Item") -> 这里的新 Item 应该是 textfield 中的文本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2015-08-12
    • 2015-11-02
    相关资源
    最近更新 更多