J'essaye de changer ListViewController
navigationItem.titleView
basé sur la ligne sélectionnée dans CollectionViewController
. J'essaye de faire ceci using une méthode de délégué mais son ne fonctionne pas. didSelectRowAt
est appelé, mais le func changeTitleView
n'est jamais appelé. Je ne suis pas sûr de ce qui ne va pas. Lorsque j'utilise le func changeTitleView
à l'intérieur de CollectionViewController
et l'utilise dans sa propre classe, cela fonctionne, donc je sais que la fonction fonctionne. Je ne suis pas tout à fait sûr comment passer les String
données choisies de CollectionVC
à ListVC
. Je suis très nouveau à la méthode des délégués.Méthode de délégué pour modifier la navigationItem.titleView ne fonctionne pas
variable globale:
var selectedCollection: CollectionItem?
CollectionViewController:
protocol HandleTitleView {
func doesThisWork(answer: String)
}
class CollectionViewController: UITableViewController {
var handleTitleViewDelegate: HandleTitleView? = nil
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedItem = collections[indexPath.row]
selectedCollection = selectedItem
let title = selectedCollection?.collectionTitle
handleTitleViewDelegate?.doesThisWork(answer: title!)
}
}
ListViewController:
class ListViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
// set up the collectionViewDelegate
let collectionViewController = storyboard?.instantiateViewController(withIdentifier: "CollectionViewController") as! CollectionViewController
collectionViewController.titleView = titleLabel
collectionViewController.handleTitleViewDelegate = self
}
extension ListViewController: HandleTitleView {
func doesThisWork(answer: String) {
print(answer)
}
}
Je vous remercie de toute aide que vous pouvez me fournir. Merci d'avance.
MISE À JOUR
J'instancié avec la CollectionViewController
à travers un menu latéral nommé MenuTableViewController
. Je pris conscience maintenant que je dois aux méthodes de délégué de la chaîne, cependant, CollectionViewController
est noyé dans une barre de navigation quand j'instancier, je dois instancier CollectionViewControllerNav
et je suis incapable de mettre MenuTableViewController
en tant que délégué CollectionVC
:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
case 0:
let collectionViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CollectionViewController") as! CollectionViewController
collectionViewController.handleTitleViewDelegate = self
let collectionViewControllerNav = storyboard?.instantiateViewController(withIdentifier: "CollectionViewControllerNav")
self.present(collectionViewControllerNav!, animated: true, completion: nil)
I ne suis pas sûr comment définir la méthode déléguée lorsque cela est le cas
MISE à JOUR
la méthode déléguée fonctionne quand je Presen le CollectionViewController
mais pas son CollectionViewControllerNav
homologue
Vous ne pouvez pas remplacer la méthode dans l'extension. Pour votre problème, vous pouvez utiliser des méthodes de délégués en implémentant la méthode select select dans collectionviewcontroller et les déléguer à Listviewcontroller. Dans le contrôleur de liste, vous vous conformez au délégué et écrivez votre code. –
Merci pour cette information. J'ai mis à jour le code (et ma question) pour refléter ce changement, cependant la fonction de méthode/protocole de délégué n'est toujours pas appelée.Que puis-je faire pour connecter les deux? – zachenn
Pouvez-vous partager une implémentation? donc je peux regarder dedans Merci –