I'm developing an iOS app and now I'm at a loss. I'm trying to pass data from the first View Controller to the first tab of a TabBarViewController (with using the storyboard). I found a lot of tutorials that explain how to pass data between view controllers, but nothing worked with my tab bar. I know that the tab bar controller contains a kind of array of views. The relation between the View Controller and the Tab Bar Controller is realized using a segue (push). So, I thought it is easy to use the prepareForSegue() - method. Like that:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"tab"]) {
// ...
}
}
Unfortunately, the relation between the Tab Bar Controller and each tab bar view is no real segue. It's only a "relationship". That means, there is no segue identifier I am able to use for the the method above-mentioned. Is there a possibility to use the prepareForSegue in this case? If not, any ideas how to solve this problem? I know that there is a similar question, but the answer wasn't that helpful. Do I have to create a new file for every tab (view) within the tab bar controller? Or is it possible to have one class (m. & h.) for the whole tab bar controller, accessing the several view with objectAtIndex()?
Thanks in advance!
Here's my setup that worked:
tab
)ViewController
TabBarController
TabsViewController
(shared between both)Setup labelString
property in Tab Bar Controller:
In TabBarController.h
:
@property (nonatomic, strong) NSString *labelString;
In TabBarController.m
:
@synthesize labelString;
Setup prepareForSegue
method in ViewController.m
:
#import "TabBarController.h"
...
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"tab"]){
TabBarController *tabBar = [segue destinationViewController];
[tabBar setLabelString:[NSString stringWithFormat:@"This has been set"]];
}
}
Setup UILabel
s for Child Tab Bar View Controllers.
UILabel
controls into both child View ControllersCreate property in TabsViewController.h
:
@property (nonatomic, strong) IBOutlet UILabel *label;
Hook 5.1
and 5.2
up in Storyboard
Setup ViewDidLoad
method in TabsViewController.m
:
#import "TabBarController.h"
...
@synthesize label;
...
- (void)viewDidLoad
{
[super viewDidLoad];
TabBarController *tabBar = (TabBarController *)self.tabBarController;
label.text = [NSString stringWithFormat:@"Tab %i: %@",[tabBar.viewControllers indexOfObject:self],tabBar.labelString];
}
Now clicking on the 1st and 2nd tabs will have the labels display Tab 0: This has been set
and Tab 1: This has been set
, respectively.