2017-07-08 51 views
1

我在swift中製作todolist應用程序。這裏是什麼樣子:swift 3使用ViewController中的textField向TableViewController添加行

enter image description here

到目前爲止創建待辦事項我用了一個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") 
    } 
} 

我得到一個錯誤:

" Use of unresolved "todoValue"

回答

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

希望這有助於!

+0

嘿謝謝你的回答!但我不明白textField值將如何獲取並添加到TableViewController新行中? – Nil

+0

你可以通過添加一個按鈕來實現,例如在按鈕的IBAction中,從textfeild中獲取文本並調用updateTableViewClosure。 您也可以通過將視圖控制器設置爲文本框的委託並實現'textFieldShouldReturn'委託方法來實現。 –

+0

這實際上是我遇到麻煩,如何訪問我的textField在tableViewController中的viewController的文本? – Nil

相關問題