Programmatically pressing a UITabBar button in Xcode

你。 提交于 2019-11-30 08:08:56

问题


Sorry for the newbie question. I have a UITabBar in my main window view as well as an array of UINavigationControllers for each Tab. The structure is similar to the iPod app in that the main views can be seen by selecting TabBar items and then the user can drill down further with the NavigationController by pushing views to the stack.

What I would like to be able to do is to do the equivalent of pressing a TabBar button at the bottom from any of the subviews in code (i.e., change the selected property of the TabBar and display launch the first view controller for the tab).

Any help would be greatly appreciated.

Dave


回答1:


[myTabBarController setSelectedIndex:index]

EDIT: Answering the part 2 question from the comment:

You can define a method in AppDelegate for switching to a different tab.

And you can get hold of appdelegate from anywhere and send a message.. something like:

 MyAppDelegate *appDelegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate];
 [appDelegate SwitchToTab:index]



回答2:


alternatively...

[self.parentViewController.tabBarController setSelectedIndex:3];



回答3:


I'd like to reply to Prakash, but can't figure out how. Maybe I'm blocked until my score goes up.

Anyhow, I hope this helps someone:

I was doing what Prakash said, and nothing was happening. It's because to get a pointer to my app delegate, I was doing this:

AppDelegate_Phone *appDelegate = [[AppDelegate_Phone alloc] init];

When I should have been doing this:

AppDelegate_Phone *appDelegate = (AppDelegate_Phone *) [[UIApplication sharedApplication] delegate];

Newbie mistake.




回答4:


For this, You just need to take UITabBar controller -

.h File -

UITabBarController *_pTabBarController;
@property (nonatomic, retain) IBOutlet  UITabBarController *_pTabBarController;

.m File -
// synthesize it 
@synthesize  _pTabBarController;    

At initial load 

// You can  write one function to add tabBar - 

// As you have already mentioned you have created an array , if not 

_pTabBarController = [[UITabBarController alloc] init];
    NSMutableArray *localViewControllersArray = [[NSMutableArray alloc] initWithCapacity:4];
    UINavigationController *theNavigationController;

    _pController = [[Controller alloc] initStart];  
    _pController.tabBarItem.tag = 1;
    _pController.title = @"Baranches";
    theNavigationController = [[UINavigationController alloc] initWithRootViewController:_pController];
    theNavigationController.tabBarItem.tag = 1;
    theNavigationController.tabBarItem.image = [UIImage imageNamed:@"icon_branches.png"];
    [localViewControllersArray addObject:theNavigationController];
    [theNavigationController release];

than you can set index as per your needs

self._pTabBarController.selectedIndex = 0; // as per your requirements



回答5:


[self.parentViewController.tabBarController setSelectedIndex:3];

Selected the index for me but it just highlighted the navbarcontroller's index as the active index, but while it highlighted that index it was actually on a different viewcontroller than was suggested by the tabbarmenu item.

Just wanted to add that I used this from my view controller, and it performed like someone actually pressed the menuitem; from code:

UITabBarController *MyTabController = (UITabBarController *)((AppDelegate*) [[UIApplication sharedApplication] delegate]).window.rootViewController;
[MyTabController setSelectedIndex:1];

Thank you for this post/answers it helped out a lot in my project.




回答6:


I wanted to do something similar but for XCode 6.4 iOS (8.4) setSelectedIndex by itself won't do it.

Add the view controllers of the tab bar to a list and then use something like the following in some function and then call it:

FirstViewController *firstVC = [[self viewControllers] objectAtIndex:0];
[self.selectedViewController.view removeFromSuperview]
[self.view insertSubview:firstVC.view belowSubview:self.tabBar];
[self.tabBar setSelectedItem:self.firstTabBarItem];
self.selectedViewController = firstVC;

You might have similar code already inside your didSelectedItem..

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

   if (item == self.firstTabBarItem) 
      // Right here
    }
    else if ...
}


来源:https://stackoverflow.com/questions/1795407/programmatically-pressing-a-uitabbar-button-in-xcode

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!