0

I have already read: Programatically switching tabs using selectedViewController property

I am using XCode 10 and Swift 4.2 I run 2 lines of code in a ViewController.ViewDidAppear which is assigned to the second Tab Bar Item (index 1). Below myAppsTabBarController is a swift class that subclasses UITabBarController and has a static variable called myTabBarController that is assigned to self.

myAppsTabBarController.myTabBarController?.selectedIndex = 3
myAppsTabBarController.myTabBarController?.selectedViewController = myAppsTabBarController.myTabBarController?.viewControllers[3]

The first line works as I can see the 4th tab bar item light up (like it is selected.) The second line doesn't seem to work as the view doesn't update to the 4th tab. I have printed out myAppsTabBarController.myTabBarController?.viewControllers?.count and it is 4 so I know it exists. Any idea why the second line isn't changing the user's view? Thank you.

Paul K.
  • 95
  • 1
  • 12
  • Did you call it in the main thread? – E.Coms Nov 10 '18 at 17:20
  • For me, both lines are working fine individually. Even, changing the view controller also updates the selectedIndex property accordingly and vice versa. – Sateesh Yemireddi Nov 10 '18 at 17:25
  • Can you please share the code for how the viewControllers are setup? – Sateesh Yemireddi Nov 10 '18 at 17:25
  • Hmm I'm not sure what you mean by main thread. When my app starts up the 0 index tab bar item is the view that is presented. When the user clicks on the tab bar item at index 1 if certain user data isn't set up (which i check for at the end of ViewDidLoad) then I'd like to send the user to tab bar item at index 3. So this code sits in a function called at the end of ViewDidLoad. – Paul K. Nov 10 '18 at 18:43
  • I will add that the second line does seem to encompass the function of the first line so I guess I could drop the .selectedIndex = 3 line. – Paul K. Nov 10 '18 at 19:08
  • I also found this: https://stackoverflow.com/questions/23966301/uitabbarcontroller-selectedindex-and-selectedviewcontroller-do-not-work But moving the code to ViewDidAppear didn't change anything. – Paul K. Nov 10 '18 at 20:26
  • I edited the original post to point out that I am referencing the tab bar (myTabBarController) as a static variable inside the UITabBarController subclass I made from a ViewController. So maybe that has something to do with why it isn't working? – Paul K. Nov 11 '18 at 00:15
  • I'm wondering if there needs to be a line of code after the .selectedViewController call ? Something with a "present" type of command? – Paul K. Nov 11 '18 at 15:18
  • So I tried: myAppsTabBarController.myTabBarController?.selectedViewController?.present(myAppsTabBarController.myTabBarController?.viewControllers?[3]!, animated: true, completion: nil) But I got an uncaught exception NSInvalidArgumentException reason: Application tried to present modally an active controller Am I getting closer? (PS- I don't know why the 4 spaces rule won't work to define that line of code in this comment.) – Paul K. Nov 11 '18 at 18:49

0 Answers0