Ich muss Code schreiben, um die Ansicht beim Starten der iOS-App auf eine andere Registerkarte umzuschalten (so wird beispielsweise die zweite Registerkarte standardmäßig anstelle der ersten angezeigt).
Ich bin neu bei Swift und habe Folgendes herausgefunden:
Der Code sollte wahrscheinlich in der Funktion override func viewDidLoad () des ViewControllers der ersten Registerkarte enthalten sein.
Der folgende Code zeigt den zweiten ViewController, jedoch nicht die Registerkartenleiste unten (vcOptions ist das zweite ViewController-Registerkartenelement:
let vc : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("vcOptions")
self.showViewController(vc as UIViewController, sender: vc)
Ich denke, die Antwort könnte in der Verwendung von UITabbarController.selectedIndex = 1 liegen, aber nicht ganz sicher, wie dies implementiert werden soll.
quelle
if let tababarController = self.window!.rootViewController as! UITabBarController? { tababarController.selectedIndex = tabIndex }
TabBarViewController
:class TabBarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() selectedIndex = 1 }
In diesem Fall wird nur die sekundäre Registerkarte ausgewählt, die das OP ausführen möchte.as UITabBarController
mitas! UITabBarController
und es funktioniert in Swift 3 auch .. Danke für die Antwort!1.Erstellen Sie eine neue Klasse, die UITabBarController ersetzt. Z.B:
class xxx: UITabBarController { override func viewDidLoad() { super.viewDidLoad() }
2. Fügen Sie der Funktion viewDidLoad () den folgenden Code hinzu:
self.selectedIndex = 1; //set the tab index you want to show here, start from 0
3. Gehen Sie zum Storyboard und setzen Sie die benutzerdefinierte Klasse Ihres Tab Bar Controllers auf diese neue Klasse. (MyVotes1 als Beispiel im Bild)
quelle
Swift 3
Sie können diesen Code zum Standard-View-Controller (
index 0
) in Ihrem tabBarController hinzufügen:override func viewWillAppear(_ animated: Bool) { _ = self.tabBarController?.selectedIndex = 1 }
Beim Laden wird die Registerkarte automatisch zum zweiten Element in der Liste verschoben, der Benutzer kann jedoch jederzeit manuell zu dieser Ansicht zurückkehren.
quelle
super.viewWillAppear()
. Auch die Zuordnung zu_ =
ist nicht erforderlich.Der viewController muss ein untergeordnetes Element von UITabBarControllerDelegate sein . Sie müssen also nur den folgenden Code in SWIFT 3 hinzufügen
self.tabBarController?.selectedIndex = 1
quelle
Um die Antwort von @ codester zu erweitern, müssen Sie sie nicht überprüfen und dann zuweisen. Sie können dies in einem Schritt tun:
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 }
quelle
In einer typischen Anwendung gibt es einen UITabBarController, in den drei oder mehr UIViewController als Registerkarten eingebettet sind. In einem solchen Fall können Sie den ausgewählten Index einfach festlegen, indem Sie einen UITabBarController als YourTabBarController klassifizieren:
selectedIndex = 1 // Displays 2nd tab. The index starts from 0.
Wenn Sie von einer anderen Ansicht aus zu YourTabBarController navigieren, können Sie in dieser Ansicht die Methode vorbereiten (für segue :) vorbereiten:
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 } }
Ich verwende diese Art der Einstellung der Registerkarte mit Xcode 10 und Swift 4.2.
quelle
Swift 5
//MARK:- if you are in UITabBarController self.selectedIndex = 1
oder
tabBarController?.selectedIndex = 1
quelle
Nur um nach iOS 13 zu aktualisieren, haben wir jetzt SceneDelegates. Sie können also die gewünschte Registerkartenauswahl wie folgt in SceneDelegate.swift einfügen:
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 } }
quelle