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!
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) } }
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) } } }
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.