J'ai un UIViewController
. Il a une vue de conteneur et un UITableViewController
est incorporé dedans.Exécuter une fonction dans le contrôleur de vue intégré
La vue tableau présente un tableau de 20 numéros. Taper sur le bouton Delete affiche une feuille d'action qui donne 2 options pour modifier le tableau ci-dessus.
I ont deux fonctions à l'intérieur UITableViewController
pour modifier la matrice.
class TableViewController: UITableViewController {
fileprivate var values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
override func viewDidLoad() {
super.viewDidLoad()
}
func deleteFirstTen() {
values.removeSubrange(values.startIndex..<values.startIndex.advanced(by: 10))
tableView.reloadData()
}
func deleteLastTen() {
values.removeSubrange(values.startIndex.advanced(by: 10)..<values.endIndex)
tableView.reloadData()
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return values.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = "\(values[indexPath.row])"
return cell
}
}
J'initiatialize le contrôleur de vue et appeler les fonctions de la UIViewController
mais il ne fait rien.
class ViewController: UIViewController {
@IBAction func didTapDeleteButton(_ sender: UIBarButtonItem) {
let tableViewController = storyboard?.instantiateViewController(withIdentifier: "TableViewController") as! TableViewController
let sheet = UIAlertController(title: nil, message: "Do You Want to Delete...", preferredStyle: .actionSheet)
sheet.addAction(UIAlertAction(title: "1 - 10", style: .default) { action in
tableViewController.deleteFirstTen()
})
sheet.addAction(UIAlertAction(title: "11 - 20", style: .default) { action in
tableViewController.deleteLastTen()
})
sheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
present(sheet, animated: true, completion: nil)
}
}
Comment appeler une fonction dans un contrôleur de vue intégré correctement?
Projet de démonstration chargé here.
est-il vraiment nécessaire le UITableViewController intégré? pourquoi vous ne ajoutez pas simplement le UITableView et son délégué sur votre ViewController? –
@GiuseppeSapienza Ceci est une version simplifiée de mes besoins réels. Dans l'application réelle, je dois afficher une vue de table et une vue de collection dans le même contrôleur de vue. Je dois donc utiliser des vues conteneur. – Isuru
Si vous n'avez pas besoin d'appeler la fonction avec les paramètres, vous pouvez utiliser 'NotificationCenter' et ajouter un observateur à l'intérieur de votre tableviewcontroller, puis dans votre viewcontroller qui intègre cette vue, le controller affiche le nom de ce que vous observez le didTapDeleteButton est appelé. Sinon, si vous avez besoin de paramètres à transmettre, je stockerai une fermeture à l'intérieur de votre viewcontroller qui fait référence à une méthode à l'intérieur du tableviewcontroller et l'appellera cette fermeture si nécessaire. – TNguyen