我正在开发一个应用程序,在其中我使用选项卡栏控制器。当应用程序打开时,它应该只显示一个选项卡栏项目"Restaurants",当我从任何餐厅的菜单中选择一些食物项目时,应该显示另一个名为items的选项卡栏视图控制器。请帮助我如何做到这一点。
提前谢谢。
这里有一种方法:
-
根据需要创建应用程序,并确保在添加
TabBarController
时,应该只有一个选项卡项目(删除添加选项卡控制器时默认添加的其他项目) -
创建
UITabBarController
的新子类 -
从故事板中分配所有控制器的类,以及指定特定的故事板标识符
-
声明我在
AppDelegate.h
中添加的BOOL
类型的全局属性(在用户默认值中或您想要维护的位置)@property (assign, nonatomic) BOOL isAddNew;
-
现在,从你想在选项卡中添加(显示)新选项卡的地方,添加代码,我的代码是:
- (IBAction)addNewTab:(id)sender { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; appDelegate.isAddNew = TRUE; [self.tabBarController viewDidLoad]; }
-
然后转到您的自定义选项卡控制器(它是在步骤2->
UITabBarController
的子类中创建的),我的类是.h
#import <UIKit/UIKit.h> @interface TabViewController : UITabBarController @end
.m
是
#import "TabViewController.h"
#import "AppDelegate.h"
#import "ViewController2.h"
#import "ViewController3.h"
@interface TabViewController ()
{
AppDelegate *appDelegate;
}
@end
@implementation TabViewController
- (void)viewDidLoad
{
[super viewDidLoad];
appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.isAddNew == TRUE)
{
ViewController2 *view2 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController2"];
//ViewController3 *view3 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController3"];
NSMutableArray *tabViewControllers = [self.viewControllers mutableCopy]; // [[NSMutableArray alloc] init];
[tabViewControllers addObject:view2];
//[tabViewControllers addObject:view3];
[self setViewControllers:tabViewControllers];
//can't set this until after its added to the tab bar
// ------ First way ------
view2.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Second" image:[UIImage imageNamed:@"selectimg.png"] tag:1];
// ------ Second way ------
view2.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Second" image:[UIImage imageNamed:@"deselectimg"] selectedImage:[UIImage imageNamed:@"selectimg.png"]];
// ------ Third way ------
view2.tabBarItem = [[UITabBarItem alloc] init];
view2.tabBarItem.selectedImage = [[UIImage imageNamed:@"selectimg.png”]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
view2.tabBarItem.image = [[UIImage imageNamed:@"deselectimg.png”]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
view2.tabBarItem.title = @"Second";
//view3.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Third" image:[UIImage imageNamed:@"third.png"] tag:2];
[appDelegate.window setRootViewController:self];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}