Call different viewControllers on click of tab bar of UITabBarController
Below is the image of my UITabBarController
structure in storyboard.
Right now in storyboard, AboutUsViewController(UIViewController)
is bound with my tabBar button click event i.e. If I click on tabBar button, AboutUsViewController
is opening but now my functionality is based on certain conditions. I want to call ContactRequstViewController
instead of AboutUsViewController
on same tabBar button click.
Following is my code to open ContactRequstViewController
.
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
if (tabBarController.selectedIndex == 2){
UIStoryboard *story = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
ContactRequstViewController *contactVC = [story instantiateViewControllerWithIdentifier:@"ContactUsView"];
[self.navigationController pushViewController:contactVC animated:YES];
}
}
After writing above code I am not able to load ContactRequestViewController
.
ios objective-c uitabbarcontroller uitabbar
add a comment |
Below is the image of my UITabBarController
structure in storyboard.
Right now in storyboard, AboutUsViewController(UIViewController)
is bound with my tabBar button click event i.e. If I click on tabBar button, AboutUsViewController
is opening but now my functionality is based on certain conditions. I want to call ContactRequstViewController
instead of AboutUsViewController
on same tabBar button click.
Following is my code to open ContactRequstViewController
.
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
if (tabBarController.selectedIndex == 2){
UIStoryboard *story = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
ContactRequstViewController *contactVC = [story instantiateViewControllerWithIdentifier:@"ContactUsView"];
[self.navigationController pushViewController:contactVC animated:YES];
}
}
After writing above code I am not able to load ContactRequestViewController
.
ios objective-c uitabbarcontroller uitabbar
As far as i can see, there is no navigation controller to theUITabbarController
so theself.navigationController
should actually be nil and the reason why nothing is being pushed. Kindly have a look.
– Rikh
Nov 14 '18 at 20:19
add a comment |
Below is the image of my UITabBarController
structure in storyboard.
Right now in storyboard, AboutUsViewController(UIViewController)
is bound with my tabBar button click event i.e. If I click on tabBar button, AboutUsViewController
is opening but now my functionality is based on certain conditions. I want to call ContactRequstViewController
instead of AboutUsViewController
on same tabBar button click.
Following is my code to open ContactRequstViewController
.
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
if (tabBarController.selectedIndex == 2){
UIStoryboard *story = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
ContactRequstViewController *contactVC = [story instantiateViewControllerWithIdentifier:@"ContactUsView"];
[self.navigationController pushViewController:contactVC animated:YES];
}
}
After writing above code I am not able to load ContactRequestViewController
.
ios objective-c uitabbarcontroller uitabbar
Below is the image of my UITabBarController
structure in storyboard.
Right now in storyboard, AboutUsViewController(UIViewController)
is bound with my tabBar button click event i.e. If I click on tabBar button, AboutUsViewController
is opening but now my functionality is based on certain conditions. I want to call ContactRequstViewController
instead of AboutUsViewController
on same tabBar button click.
Following is my code to open ContactRequstViewController
.
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
if (tabBarController.selectedIndex == 2){
UIStoryboard *story = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
ContactRequstViewController *contactVC = [story instantiateViewControllerWithIdentifier:@"ContactUsView"];
[self.navigationController pushViewController:contactVC animated:YES];
}
}
After writing above code I am not able to load ContactRequestViewController
.
ios objective-c uitabbarcontroller uitabbar
ios objective-c uitabbarcontroller uitabbar
edited Nov 14 '18 at 17:37
kit
1,1063816
1,1063816
asked Nov 14 '18 at 17:16
iPhoneiPhone
2,14832651
2,14832651
As far as i can see, there is no navigation controller to theUITabbarController
so theself.navigationController
should actually be nil and the reason why nothing is being pushed. Kindly have a look.
– Rikh
Nov 14 '18 at 20:19
add a comment |
As far as i can see, there is no navigation controller to theUITabbarController
so theself.navigationController
should actually be nil and the reason why nothing is being pushed. Kindly have a look.
– Rikh
Nov 14 '18 at 20:19
As far as i can see, there is no navigation controller to the
UITabbarController
so the self.navigationController
should actually be nil and the reason why nothing is being pushed. Kindly have a look.– Rikh
Nov 14 '18 at 20:19
As far as i can see, there is no navigation controller to the
UITabbarController
so the self.navigationController
should actually be nil and the reason why nothing is being pushed. Kindly have a look.– Rikh
Nov 14 '18 at 20:19
add a comment |
2 Answers
2
active
oldest
votes
If you want to replace the root view controller at that selected tab based on custom logic, try using setViewControllers:animated:
method of the UITabBarController
.
You could do something like this:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 1 && tabBarController.viewControllers.count > tabBarController.selectedIndex) {
BOOL shouldShowContactVC = (BOOL)(rand() % 2);
NSMutableArray *viewControllers = [[tabBarController viewControllers] mutableCopy];
UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *newVC = nil;
if (shouldShowContactVC) {
newVC = [main instantiateViewControllerWithIdentifier:@"ContactUsVC"];
} else {
newVC = [main instantiateViewControllerWithIdentifier:@"AboutUsVC"];
}
if (newVC) {
[viewControllers replaceObjectAtIndex:tabBarController.selectedIndex withObject:newVC];
newVC.tabBarItem = viewController.tabBarItem;
[tabBarController setViewControllers:viewControllers animated:YES];
}
}
}
I implemented your code but I am not able to load ContactRequestViewController.
– iPhone
Nov 14 '18 at 17:44
@iPhone Okay, I created an example project. You can find it here: bitbucket.org/pranay_k/tabbarexample/commits/all. Check it out and let me know.
– Pranay
Nov 14 '18 at 18:20
I implemented this too but did not get success. Let me clear one thing my code is not written in appdelegate.m file but it is in MainTabController(UITabBarController) file which is bound to Main Tab Controller in storyboard.
– iPhone
Nov 14 '18 at 18:35
let me clear that my code is not written in appdelegate.m file but it is written in mainTabController(UITabController) which is bound to Main Tab Controller in storyboard file.
– iPhone
Nov 14 '18 at 18:51
It doesn't matter where you set the delegate. Be it inside the AppDelegate or anywhere else.
– Pranay
Nov 14 '18 at 19:04
|
show 2 more comments
In my experience , sometimes we don't use tabbarVC, because it's not flexible, such as hide, show, or change items number. So we set a navigationVC as rootVC, u can create a View, just make it's look like a tabbarVC.
This view is more easy to used.And u don't need to care any delegate method or something else. u can do anything u want.
That's all.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53305560%2fcall-different-viewcontrollers-on-click-of-tab-bar-of-uitabbarcontroller%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
If you want to replace the root view controller at that selected tab based on custom logic, try using setViewControllers:animated:
method of the UITabBarController
.
You could do something like this:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 1 && tabBarController.viewControllers.count > tabBarController.selectedIndex) {
BOOL shouldShowContactVC = (BOOL)(rand() % 2);
NSMutableArray *viewControllers = [[tabBarController viewControllers] mutableCopy];
UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *newVC = nil;
if (shouldShowContactVC) {
newVC = [main instantiateViewControllerWithIdentifier:@"ContactUsVC"];
} else {
newVC = [main instantiateViewControllerWithIdentifier:@"AboutUsVC"];
}
if (newVC) {
[viewControllers replaceObjectAtIndex:tabBarController.selectedIndex withObject:newVC];
newVC.tabBarItem = viewController.tabBarItem;
[tabBarController setViewControllers:viewControllers animated:YES];
}
}
}
I implemented your code but I am not able to load ContactRequestViewController.
– iPhone
Nov 14 '18 at 17:44
@iPhone Okay, I created an example project. You can find it here: bitbucket.org/pranay_k/tabbarexample/commits/all. Check it out and let me know.
– Pranay
Nov 14 '18 at 18:20
I implemented this too but did not get success. Let me clear one thing my code is not written in appdelegate.m file but it is in MainTabController(UITabBarController) file which is bound to Main Tab Controller in storyboard.
– iPhone
Nov 14 '18 at 18:35
let me clear that my code is not written in appdelegate.m file but it is written in mainTabController(UITabController) which is bound to Main Tab Controller in storyboard file.
– iPhone
Nov 14 '18 at 18:51
It doesn't matter where you set the delegate. Be it inside the AppDelegate or anywhere else.
– Pranay
Nov 14 '18 at 19:04
|
show 2 more comments
If you want to replace the root view controller at that selected tab based on custom logic, try using setViewControllers:animated:
method of the UITabBarController
.
You could do something like this:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 1 && tabBarController.viewControllers.count > tabBarController.selectedIndex) {
BOOL shouldShowContactVC = (BOOL)(rand() % 2);
NSMutableArray *viewControllers = [[tabBarController viewControllers] mutableCopy];
UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *newVC = nil;
if (shouldShowContactVC) {
newVC = [main instantiateViewControllerWithIdentifier:@"ContactUsVC"];
} else {
newVC = [main instantiateViewControllerWithIdentifier:@"AboutUsVC"];
}
if (newVC) {
[viewControllers replaceObjectAtIndex:tabBarController.selectedIndex withObject:newVC];
newVC.tabBarItem = viewController.tabBarItem;
[tabBarController setViewControllers:viewControllers animated:YES];
}
}
}
I implemented your code but I am not able to load ContactRequestViewController.
– iPhone
Nov 14 '18 at 17:44
@iPhone Okay, I created an example project. You can find it here: bitbucket.org/pranay_k/tabbarexample/commits/all. Check it out and let me know.
– Pranay
Nov 14 '18 at 18:20
I implemented this too but did not get success. Let me clear one thing my code is not written in appdelegate.m file but it is in MainTabController(UITabBarController) file which is bound to Main Tab Controller in storyboard.
– iPhone
Nov 14 '18 at 18:35
let me clear that my code is not written in appdelegate.m file but it is written in mainTabController(UITabController) which is bound to Main Tab Controller in storyboard file.
– iPhone
Nov 14 '18 at 18:51
It doesn't matter where you set the delegate. Be it inside the AppDelegate or anywhere else.
– Pranay
Nov 14 '18 at 19:04
|
show 2 more comments
If you want to replace the root view controller at that selected tab based on custom logic, try using setViewControllers:animated:
method of the UITabBarController
.
You could do something like this:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 1 && tabBarController.viewControllers.count > tabBarController.selectedIndex) {
BOOL shouldShowContactVC = (BOOL)(rand() % 2);
NSMutableArray *viewControllers = [[tabBarController viewControllers] mutableCopy];
UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *newVC = nil;
if (shouldShowContactVC) {
newVC = [main instantiateViewControllerWithIdentifier:@"ContactUsVC"];
} else {
newVC = [main instantiateViewControllerWithIdentifier:@"AboutUsVC"];
}
if (newVC) {
[viewControllers replaceObjectAtIndex:tabBarController.selectedIndex withObject:newVC];
newVC.tabBarItem = viewController.tabBarItem;
[tabBarController setViewControllers:viewControllers animated:YES];
}
}
}
If you want to replace the root view controller at that selected tab based on custom logic, try using setViewControllers:animated:
method of the UITabBarController
.
You could do something like this:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 1 && tabBarController.viewControllers.count > tabBarController.selectedIndex) {
BOOL shouldShowContactVC = (BOOL)(rand() % 2);
NSMutableArray *viewControllers = [[tabBarController viewControllers] mutableCopy];
UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *newVC = nil;
if (shouldShowContactVC) {
newVC = [main instantiateViewControllerWithIdentifier:@"ContactUsVC"];
} else {
newVC = [main instantiateViewControllerWithIdentifier:@"AboutUsVC"];
}
if (newVC) {
[viewControllers replaceObjectAtIndex:tabBarController.selectedIndex withObject:newVC];
newVC.tabBarItem = viewController.tabBarItem;
[tabBarController setViewControllers:viewControllers animated:YES];
}
}
}
edited Nov 14 '18 at 18:13
answered Nov 14 '18 at 17:38
PranayPranay
53616
53616
I implemented your code but I am not able to load ContactRequestViewController.
– iPhone
Nov 14 '18 at 17:44
@iPhone Okay, I created an example project. You can find it here: bitbucket.org/pranay_k/tabbarexample/commits/all. Check it out and let me know.
– Pranay
Nov 14 '18 at 18:20
I implemented this too but did not get success. Let me clear one thing my code is not written in appdelegate.m file but it is in MainTabController(UITabBarController) file which is bound to Main Tab Controller in storyboard.
– iPhone
Nov 14 '18 at 18:35
let me clear that my code is not written in appdelegate.m file but it is written in mainTabController(UITabController) which is bound to Main Tab Controller in storyboard file.
– iPhone
Nov 14 '18 at 18:51
It doesn't matter where you set the delegate. Be it inside the AppDelegate or anywhere else.
– Pranay
Nov 14 '18 at 19:04
|
show 2 more comments
I implemented your code but I am not able to load ContactRequestViewController.
– iPhone
Nov 14 '18 at 17:44
@iPhone Okay, I created an example project. You can find it here: bitbucket.org/pranay_k/tabbarexample/commits/all. Check it out and let me know.
– Pranay
Nov 14 '18 at 18:20
I implemented this too but did not get success. Let me clear one thing my code is not written in appdelegate.m file but it is in MainTabController(UITabBarController) file which is bound to Main Tab Controller in storyboard.
– iPhone
Nov 14 '18 at 18:35
let me clear that my code is not written in appdelegate.m file but it is written in mainTabController(UITabController) which is bound to Main Tab Controller in storyboard file.
– iPhone
Nov 14 '18 at 18:51
It doesn't matter where you set the delegate. Be it inside the AppDelegate or anywhere else.
– Pranay
Nov 14 '18 at 19:04
I implemented your code but I am not able to load ContactRequestViewController.
– iPhone
Nov 14 '18 at 17:44
I implemented your code but I am not able to load ContactRequestViewController.
– iPhone
Nov 14 '18 at 17:44
@iPhone Okay, I created an example project. You can find it here: bitbucket.org/pranay_k/tabbarexample/commits/all. Check it out and let me know.
– Pranay
Nov 14 '18 at 18:20
@iPhone Okay, I created an example project. You can find it here: bitbucket.org/pranay_k/tabbarexample/commits/all. Check it out and let me know.
– Pranay
Nov 14 '18 at 18:20
I implemented this too but did not get success. Let me clear one thing my code is not written in appdelegate.m file but it is in MainTabController(UITabBarController) file which is bound to Main Tab Controller in storyboard.
– iPhone
Nov 14 '18 at 18:35
I implemented this too but did not get success. Let me clear one thing my code is not written in appdelegate.m file but it is in MainTabController(UITabBarController) file which is bound to Main Tab Controller in storyboard.
– iPhone
Nov 14 '18 at 18:35
let me clear that my code is not written in appdelegate.m file but it is written in mainTabController(UITabController) which is bound to Main Tab Controller in storyboard file.
– iPhone
Nov 14 '18 at 18:51
let me clear that my code is not written in appdelegate.m file but it is written in mainTabController(UITabController) which is bound to Main Tab Controller in storyboard file.
– iPhone
Nov 14 '18 at 18:51
It doesn't matter where you set the delegate. Be it inside the AppDelegate or anywhere else.
– Pranay
Nov 14 '18 at 19:04
It doesn't matter where you set the delegate. Be it inside the AppDelegate or anywhere else.
– Pranay
Nov 14 '18 at 19:04
|
show 2 more comments
In my experience , sometimes we don't use tabbarVC, because it's not flexible, such as hide, show, or change items number. So we set a navigationVC as rootVC, u can create a View, just make it's look like a tabbarVC.
This view is more easy to used.And u don't need to care any delegate method or something else. u can do anything u want.
That's all.
add a comment |
In my experience , sometimes we don't use tabbarVC, because it's not flexible, such as hide, show, or change items number. So we set a navigationVC as rootVC, u can create a View, just make it's look like a tabbarVC.
This view is more easy to used.And u don't need to care any delegate method or something else. u can do anything u want.
That's all.
add a comment |
In my experience , sometimes we don't use tabbarVC, because it's not flexible, such as hide, show, or change items number. So we set a navigationVC as rootVC, u can create a View, just make it's look like a tabbarVC.
This view is more easy to used.And u don't need to care any delegate method or something else. u can do anything u want.
That's all.
In my experience , sometimes we don't use tabbarVC, because it's not flexible, such as hide, show, or change items number. So we set a navigationVC as rootVC, u can create a View, just make it's look like a tabbarVC.
This view is more easy to used.And u don't need to care any delegate method or something else. u can do anything u want.
That's all.
answered Nov 15 '18 at 2:17
KirinzerKirinzer
111
111
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53305560%2fcall-different-viewcontrollers-on-click-of-tab-bar-of-uitabbarcontroller%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
As far as i can see, there is no navigation controller to the
UITabbarController
so theself.navigationController
should actually be nil and the reason why nothing is being pushed. Kindly have a look.– Rikh
Nov 14 '18 at 20:19