Necesito escribir un código para cambiar la vista a otra pestaña cuando se inicia la aplicación de iOS (por ejemplo, la segunda pestaña se muestra de forma predeterminada en lugar de la primera).
Soy nuevo en Swift y he trabajado en lo siguiente:
El código probablemente debería ir en la función override func viewDidLoad () del ViewController de la primera pestaña.
El siguiente código muestra el segundo ViewController, pero no con la barra de pestañas en la parte inferior (vcOptions es el segundo elemento de la pestaña ViewController:
let vc : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("vcOptions")
self.showViewController(vc as UIViewController, sender: vc)
Creo que la respuesta puede estar en usar UITabbarController.selectedIndex = 1, pero no estoy seguro de cómo implementar esto.
fuente
if let tababarController = self.window!.rootViewController as! UITabBarController? { tababarController.selectedIndex = tabIndex }
TabBarViewController
:class TabBarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() selectedIndex = 1 }
En este caso, solo va a seleccionar la pestaña secundaria que es lo que quiere hacer el OP.as UITabBarController
conas! UITabBarController
y también funciona en Swift 3. ¡Gracias por la respuesta!1. Cree una nueva clase que sustituya a UITabBarController. P.ej:
class xxx: UITabBarController { override func viewDidLoad() { super.viewDidLoad() }
2.Agregue el siguiente código a la función viewDidLoad ():
self.selectedIndex = 1; //set the tab index you want to show here, start from 0
3.Vaya al guión gráfico y configure la clase personalizada de su controlador de barra de pestañas en esta nueva clase. (MyVotes1 como ejemplo en la foto)
fuente
Swift 3
Puede agregar este código al controlador de vista predeterminado (
index 0
) en su tabBarController:override func viewWillAppear(_ animated: Bool) { _ = self.tabBarController?.selectedIndex = 1 }
Tras la carga, esto movería automáticamente la pestaña al segundo elemento de la lista, pero también permitiría al usuario volver manualmente a esa vista en cualquier momento.
fuente
super.viewWillAppear()
. Además, la asignación a_ =
es innecesaria.ViewController debe ser un elemento secundario de UITabBarControllerDelegate . Entonces solo necesita agregar el siguiente código en SWIFT 3
self.tabBarController?.selectedIndex = 1
fuente
Para expandir la respuesta de @ codester, no necesita verificar y luego asignar, puede hacerlo en un solo paso:
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { // Override point for customization after application launch. if let tabBarController = self.window!.rootViewController as? UITabBarController { tabBarController.selectedIndex = 1 } return true }
fuente
En una aplicación típica hay un UITabBarController e incrusta 3 o más UIViewController como sus pestañas. En tal caso, si subclasificó un UITabBarController como YourTabBarController, entonces puede establecer el índice seleccionado simplemente por:
selectedIndex = 1 // Displays 2nd tab. The index starts from 0.
En caso de que esté navegando a YourTabBarController desde cualquier otra vista, entonces en el método prepare (para segue :) del controlador de esa vista puede hacer:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. if segue.identifier == "SegueToYourTabBarController" { if let destVC = segue.destination as? YourTabBarController { destVC.selectedIndex = 0 } }
Estoy usando esta forma de configurar la pestaña con Xcode 10 y Swift 4.2.
fuente
Rápido 5
//MARK:- if you are in UITabBarController self.selectedIndex = 1
o
tabBarController?.selectedIndex = 1
fuente
Solo para actualizar, después de iOS 13, ahora tenemos SceneDelegates. Por lo tanto, uno podría optar por colocar la selección de pestaña deseada en SceneDelegate.swift de la siguiente manera:
class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let _ = (scene as? UIWindowScene) else { return } if let tabBarController = self.window!.rootViewController as? UITabBarController { tabBarController.selectedIndex = 1 } }
fuente