Tableview.reloadData不起作用
问题描述:
我有两个控制器,我想在它们之间传递数据: 这是第一个控制器,一个tableviewcontroller。Tableview.reloadData不起作用
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
}
}
这是第二个控制器,视图 - 控制
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不工作,你能帮助我,我将非常高兴。
答
您需要参考第一个视图控制器来执行您所需的操作。 你可以做这样的事情:
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)
}
}
而当你instatiate的AddController,你需要通过你的BooksVC的参考。事情是这样的:
addController.booksVC = self
答
不行了第二视图控制器,当按下doneButton你可以
dissmisstheview trasffer数据 self.parentviewController。 books.apped(inputField.text!) self.dissmissviewcontroller
比第一个VC,你可以做这样的事情
in viewWillAppear func{
tableview.reloadData()
}
您创建'instantiateViewController'一个新的视图控制器对象,但你不做任何事情来展示它。你已经有了一个你应该使用的不同的'BooksVC'? –
不,我必须连接到BooksVC控制器,而不是创建一个新的。 – Adi