多个关系到单个UITabbar项iOS/Objective-C?
有谁知道一个标签栏项是否可以有多个关系?多个关系到单个UITabbar项iOS/Objective-C?
我想能够从单个UITabbar图标引导到两个不同的视图控制器,这取决于在登录用户的类型。
例如,如果用户登录在作为用户类型“A “,我希望选项卡栏图标可以指向配置文件视图控制器。如果用户以用户类型“B”登录,我想让相同的图标指向设置视图控制器。
我试图将附加的视图控制器连接到选项卡栏,它只是在选项卡栏上创建一个额外的图标/选项卡。
您需要从代码中完成,所以请看setViewControllers
方法。
假如你有相应vc1
vc2
vc A or B
和vc4
4个选项卡...
你可以决定哪些VC要分配,然后实例充分与控制器的 “设置”:
// set "vcA" as the 3rd tab
[self.tabBarController setViewControllers:@[vc1, vc2, vcA, vc4] animated:NO];
// or, set "vcB" as the 3rd tab
[self.tabBarController setViewControllers:@[vc1, vc2, vcB, vc4] animated:NO];
或...保存在“手动”实例化控制器上...
您可以分配故事板中的所有5个控制器,然后:
// get the array of viewControllers
NSMutableArray *a = self.tabBarController.viewControllers;
// a now contains [vc1, vc2, vcA, vcB, vc4]
// remove "vcA"
[a removeObjectAtIndex:2];
// or, remove "vcB"
[a removeObjectAtIndex:3];
// set the controllers array
[self.tabBarController setViewControllers:a animated:NO];
谢谢DonMag!这很好。在你的第二个解决方案中,我只需要确保self.tabBarController.viewControllers是可变的,因为它最初是一个NSArray。我这样做是这样的:NSMutableArray * a = [self.tabBarController.viewControllers mutableCopy]; –
你也可以放置一个容器视图在该标签的视图控制器,添加两个视图容器视图,然后根据它是什么类型的用户展示期间viewDidLoad
正确的观点。
当我有时间时会添加代码。
这将是这样做的一种方法:
A.跟踪什么样举办一个变量用户登录的,从以前的viewController传递,或在数据对象集中存放:
bool userCanAccessProfile = false;
B.根据上述布尔,更新的布局和相应逻辑代码:
//layout your tab bar
UITabBar * tabBar = [UITabBar new];
tabBar.frame = CGRectMake(0, h-50, w, 50);
tabBar.delegate = self;
[self.view addSubview:tabBar];
//create the item(s)
UITabBarItem * item = [UITabBarItem new];
item.title = (userCanAccessProfile) ? @"Profile" : @"Settings";
item.image = (userCanAccessProfile) ? [UIImage imageNamed:@"profile.png"] : [UIImage imageNamed:@"settings.png"];
[tabBar setItems:@[item]];
上面那行看起来像这样,这意味着:
something = (isThisTrue) ? (true) setThisValue : (false) setAnotherValue;
你在问userCanAccessProfile是否为true,如果是,那么你就相应地设置了不同的文本和图像。
C.当用户点击这个项目,你会再次查询布尔找出该怎么做:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
//when the item is clicked
if (userCanAccessProfile){
//open profile
} else {
//open settings
}
}
请务必设置委托在.m文件:
tabBar.delegate = self;
并在中添加委托。h文件:
@interface yourVC : UIViewController <UITabBarDelegate>
你是否试图完成这个纯粹使用故事板?或者,您是否在您的应用程序委托的applicationDidFinish启动方法中设置了选项卡栏?另外,通过标签栏图标,你的意思是,在标签上点击,同时为类型A或类型B的用户显示相同的图标? –