2017-07-06 1 views
-1

J'ai deux contrôleurs et je voudrais passer des données entre eux: Ceci est le premier contrôleur, un tableviewcontroller.Tableview.reloadData ne fonctionne pas

class BooksVC: UITableViewController { 

var books: [String] = [] 


override func viewDidLoad() { 
    super.viewDidLoad() 

    navigationItem.title = "Books" 

} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return books.count 
} 
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 

    cell.textLabel?.text = books[indexPath.row] 

    return cell 
} 
} 

Et c'est le deuxième contrôleur, une viewcontroller

class AddController: UIViewController { 
@IBOutlet weak var inputField: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

@IBAction func done(_ sender: Any) { 
    let myVC = storyboard?.instantiateViewController(withIdentifier: "BooksVC") as! BooksVC 
    myVC.books.append(inputField.text!) 
    myVC.tableView.reloadData() 

    dismiss(animated: true, completion: nil) 
} 

}

reloadData ne fonctionne pas, pouvez-vous me aide, je serais très heureux.

+0

Vous créez un nouvel objet de contrôleur de vue avec 'instantiateViewController' mais vous ne faire quelque chose pour l'afficher. Avez-vous déjà un autre 'BooksVC' que vous devriez utiliser? –

+0

Non, je dois me connecter au contrôleur BooksVC, pas en créer un nouveau. – Adi

Répondre

0

Vous devez avoir une référence au premier contrôleur de vue pour faire ce dont vous avez besoin. Vous pouvez faire quelque chose comme ceci:

class AddController: UIViewController { 
.... 
weak var booksVC: BooksVC? 

@IBAction func done(_ sender: Any) { 
    booksVC.books.append(inputField.text!) 
    booksVC.tableView.reloadData() 

    dismiss(animated: true, completion: nil) 
} 

} 

Et quand vous instatiate un addController, vous devez passer une référence de votre BooksVC. Quelque chose comme ceci:

addController.booksVC = self 
0

Bon pour la deuxième ViewController lorsque vous avez appuyé DoneButton pouvez
dissmisstheview données trasffer self.parentviewController. books.apped (inputField.text!) self.dissmissviewcontroller

que dans le premier VC vous pouvez faire quelque chose comme ça

in viewWillAppear func{ 
tableview.reloadData() 
}