tutorial tab objective example bar ios swift uitabbarcontroller

ios - objective - uitabbarcontroller swift 4



Swift: cómo ejecutar una acción cuando se presiona UITabBarItem (5)

Actualmente tengo un controlador de barra de pestañas que está conectado a un controlador de vista de tabla. Estoy tratando de ir a la parte superior de la vista de tabla cuando presiono el elemento de la barra de pestañas. Sé cómo llegar a la parte superior de la vista de la mesa. Simplemente no sé cómo hacer una acción cuando se presiona el elemento.


Debe usar UITabBarDelegate con el método didSelectItem . Úselo como cualquier delegado estándar:

class yourclass: UIViewController, UITabBarDelegate { func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { //This method will be called when user changes tab. } }

Y no olvide establecer su delegado de barra de pestañas en self en el controlador de vista.


Estaba teniendo problemas para implementar las otras respuestas aquí. Esta es una respuesta más completa. Se supone que está utilizando un UITabBarController (el valor predeterminado si crea una nueva aplicación con pestañas). Esta solución imprimirá un mensaje cada vez que se toca un botón de pestaña del controlador de vista.

Código

Cree un nuevo archivo Swift llamado MyTabBarController.swift . Pega el siguiente código.

import UIKit class MyTabBarController: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDidLoad() // tell our UITabBarController subclass to handle its own delegate methods self.delegate = self } // called whenever a tab button is tapped func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { if viewController is FirstViewController { print("First tab") } else if viewController is SecondViewController { print("Second tab") } } }

Interface Builder

En su guión gráfico, seleccione el Controlador de barra de pestañas. Luego, en el inspector de identidad, establezca el nombre de la clase en MyTabBarController (es decir, el nombre de la clase en el código anterior).

Eso es todo. Puede ejecutar su aplicación ahora y recibir una notificación cuando el usuario toque un elemento de la barra de pestañas.

Notas

  • Si necesita ejecutar un método en un toque, puede hacer algo como lo siguiente en el método didSelect .

    if let firstVC = viewController as? FirstViewController { firstVC.doSomeAction() }

  • Podría hacer que FirstViewController implemente el delegado y maneje todo allí. De esa manera no necesitaría crear ninguna subclase personalizada UITabBarController y configurarla en IB. Sin embargo, hacer que un niño haga el trabajo de los padres parece ser el lugar equivocado para hacerlo. De todos modos, aquí está:

    class FirstViewController: UIViewController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDidLoad() tabBarController?.delegate = self } func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { // ... } }

    El método didSelect anterior se llama sin importar qué pestaña se toque.

  • Documentación UITabBarControllerDelegate


SWIFT 3

class yourclass: UIViewController, UITabBarDelegate { func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { print("Test") } }

Y no olvide establecer su delegado tabBar en self en viewDidLoad

override func viewDidLoad(){ super.viewDidLoad() <YOUR TAB BAR NAME>.delegate = self }


Una solución alternativa es simplemente hacer algo en viewDidAppear en cualquier controlador de vista que muestre la pestaña.

Primer controlador de vista de pestaña

import UIKit class FirstViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) print("First tab") } }

Controlador de vista de segunda pestaña

import UIKit class SecondViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) print("Second tab") } }


Aquí hay una respuesta a esta pregunta

Básicamente haces esto:

  • Asegúrese de que su controlador de vista esté suscrito a UITabBarDelegate
  • Establecer etiquetas en IB para cada elemento de la barra de pestañas
  • Implemente el método didSelectItem, algo como esto:

    -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { if(item.tag == 1) { // Code for item 1 } else if(item.tag == 2) { // Code for item 2 } }

Esto le dará acceso a cada evento seleccionado de la pestaña. ¡Espero eso ayude!

En Swift:

func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { if(item.tag == 1) { // Code for item 1 } else if(item.tag == 2) { // Code for item 2 } }