Définir une action pour UITabBarItem

Comment puis-je définir une action pour mon UITabBarItem ? Puis-je le connecter du storyboard au code d'une manière ou d'une autre? ou par programme? Et si oui, comment cela peut-il être fait?

Ma hiérarchie est UITabBarController -> UINavigationController -> UITabBarItem

Désolé pour la question noobish mais j'ai vraiment besoin d'une réponse pour ça. Et je n'ai rien trouvé à ce sujet en ligne.

Utiliser Swift 3 et Xcode 8

Je vous remercie!

J'ai fatigué la réponse de Mannopson (n'a pas fonctionné):

 class BarsViewController: UITableViewController,UISearchResultsUpdating,UISearchBarDelegate,UISearchDisplayDelegate,UITabBarControllerDelegate{ override func viewDidLoad() { super.viewDidLoad() self.tabBarController?.delegate = self } func tabBarController(tabBarController: UITabBarController, didSelect viewController: UIViewController) { if viewController.tabBarItem.tag == 1 { self.tableView.setContentOffset(.zero, animated: true) } } } extension UITableView { func scrollToTop(animated: Bool) { setContentOffset(CGPoint.zero, animated: animated) } } 

Réponse silentBob n'a pas fonctionné pour moi:

 class BarsViewController: UITableViewController,UISearchResultsUpdating,UISearchBarDelegate,UISearchDisplayDelegate,UITabBarControllerDelegate{ override func viewDidLoad() { super.viewDidLoad() self.tabBarController?.delegate = self } func tabBarController(tabBarController: UITabBarController, didSelect viewController: UIViewController) { if viewController.tabBarItem.tag == 1 { tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: .Top, animated: true) } } } 

J'ai également essayé la réponse de Tushar Sharma et cela n'a pas fonctionné aussi bien.

Qu'est-ce que je suis en train de faire est lorsque vous faites défiler vers le bas dans le tableView vous allez appuyer sur la Tabbaritem actuelle la tableView va défiler vers le haut tout comme intagram.

Fondamentalement, vous faites ceci:

1) Assurez-vous que votre class confirme à UITabBarDelegate

2) Définir les tags dans IB pour chaque élément de la barre d'tabs

3) Implémentez la méthode didSelectItem, quelque chose comme ceci:

  class yourclass: UIViewController, UITabBarDelegate { func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { if(item.tag == 1) { //your code for tab item 1 } else if(item.tag == 2) { //your code for tab item 2 } } } 

Je pense que vous devrez configurer le protocole UITabBarControllerDelegate . Essaye ça:

 class YourClass: YourSuperClass, UITabBarControllerDelegate { func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { if viewController.tabBarItem.tag == 1 { self.tableView.setContentOffset(.zero, animated: true) } } override func viewDidLoad() { super.viewDidLoad() self.tabBarController?.delegate = self } } 

Si vous souhaitez seulement faire défiler vers le haut, il y a une option de système embedded pour cela, essayez d'appuyer sur la barre d'état.

Modifier:

Swift 3:

 class ViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func viewWillAppear(_ animated: Bool) { self.tabBarController?.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } extension UITableViewController : UITabBarControllerDelegate { public func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true) } } 

Swift 2:

 tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: .Top, animated: true) extension UITableViewController : UITabBarControllerDelegate { func tabBarController(tabBarController: UITabBarController, didSelect viewController: UIViewController) { tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: .Top, animated: true) } } 

Oh, c'était un bon déjeuner 🙂

Voici une extension pour UITableViewController que vous pouvez utiliser si vous souhaitez faire défiler vers le haut sur chaque controller de vue, je suis toujours en train de jouer avec, mais je pense que vous pouvez l'utiliser.