2017-07-20 1 views
0

J'ai une barre d'onglets avec cinq éléments, et j'essaie d'ajouter une fonctionnalité pour faire défiler vers le haut lorsque l'utilisateur appuie de nouveau sur l'élément de la barre d'onglets. Ajouté le UITabBarControllerDelegate aux vues où je veux déclencher l'événement et également créé une fonction pour déterminer l'index de la barre d'onglets sélectionné. Lorsque j'ouvre l'application, l'index 0 est sélectionné automatiquement et fonctionne parfaitement. L'affichage défile automatiquement vers le haut lorsque je défile vers le bas et touche l'index de la barre d'onglets. Le problème se produit quand je vais à l'index 1 et déclenche le défilement là. Il supprime en quelque sorte complètement le défilement automatique de mon premier élément de la barre d'onglets.Swift - L'index de la barre d'onglets sélectionné ne déclenche pas le défilement vers le haut

La sélection d'autres éléments de la barre d'onglets sans le défilement automatique n'a aucun effet sur l'index 0.

Accueil (indice 0)

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
    let tabBarIndex = tabBarController.selectedIndex 
    if tabBarIndex == 0 { 
     self.collectionView?.setContentOffset(CGPoint(x: 0, y: -10), animated: true) 
    } 
} 

utilisateurs (index 1)

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
    let tabBarIndex = tabBarController.selectedIndex 
    if tabBarIndex == 1 { 
     self.tableView?.setContentOffset(CGPoint(x: 0, y: 0), animated: true) 
    } 
} 
+0

A 'UITabBarController' ne peut avoir qu'un seul délégué. Le dernier gagne. – rmaddy

+0

Vraiment! Eh bien, comment puis-je ajouter le défilement automatique à deux différents éléments de la barre d'onglets, alors? –

Répondre

1

Quelque chose avec une propriété delegate ne peut avoir un délégué qui lui est attribué à un moment donné. Quel que soit le dernier paramètre delegate reçu le prochain appel de méthode délégué. Dans votre cas, vous pouvez probablement réinitialiser le delegate du contrôleur d'onglets à self dans la méthode viewDidAppear de chaque contrôleur d'affichage car vous souhaitez que le contrôleur d'affichage actuellement visible soit le délégué du contrôleur d'onglet en cours.

Ajouter ce qui suit à chaque contrôleur de vue qui doit être le délégué du contrôleur onglet:

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 

    self.tabBarController?.delegate = self 
} 
+0

Cela a fait l'affaire! Merci beaucoup :-) –