J'ai le code suivant que j'essaye de réaliser un "scroll to top" sur un UIViewcontroller et de "faire défiler jusqu'au début" sur un autre UIViewController.UITabBarControllerDelegate sur deux UIViewControllers séparés - Swift
Le premier circuit virtuel a une vue de table et le second circuit virtuel a une vue de collection.
-NearMeViewController-
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
//....
}
extension NearMeViewController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
let tabBarIndex = tabBarController.selectedIndex
if tabBarIndex == 0 {
self.nearMeTable.setContentOffset(CGPoint.zero, animated: true)
}
}
}
-MapSearchViewController-
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
//....
}
extension MapSearchViewController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
let tabBarIndex = tabBarController.selectedIndex
if tabBarIndex == 2 && requests.mapEventData.count > 0 {
self.resultsCollectionView?.scrollToItem(at: IndexPath(row: 0, section: 0),
at: .left,
animated: true)
}
}
}
Ils sont tous deux connectés à la même UITabBar bien sûr. Le problème est que lorsque j'ouvre l'application, et j'appuie sur le tabBarIndex 0 il défile vers le haut de la vue de la table.
Ensuite, je change VC et j'essaie d'appuyer sur le tabBarIndex 2, donc il me faut au premier élément de la vue de la collection.
Ensuite, je reviens au premier VC et quand j'essaie d'appuyer sur le tabBarIndex 0, la tableview ne fait pas défiler vers le haut (comme c'était le cas quand j'ai ouvert l'application pour la première fois).
Mais le second VC avec la vue de collection fonctionne bien.
Une idée de ce qui pourrait arriver?
et je devrais mettre ceci sur quel contrôleur de vue? –
J'ai sous-classé 'UITabBarController' pour ce type de tâche ... Ou, créez une classe' NSObject, UITabBarControllerDelegate' séparée et l'assigner en tant que délégué ... Ou, vous pouvez le placer dans le contrôleur de vue du premier onglet. Je recommanderais le sous-classement. – DonMag
Et si je sous-classe le 'UITabBarController' comment puis-je accéder à la tableview ou collectionview des autres vcs? –