2017-08-08 34 views
1

有谁知道一个标签栏项是否可以有多个关系?多个关系到单个UITabbar项iOS/Objective-C?

我想能够从单个UITabbar图标引导到两个不同的视图控制器,这取决于在登录用户的类型。

例如,如果用户登录在作为用户类型“A “,我希望选项卡栏图标可以指向配置文件视图控制器。如果用户以用户类型“B”登录,我想让相同的图标指向设置视图控制器。

我试图将附加的视图控制器连接到选项卡栏,它只是在选项卡栏上创建一个额外的图标/选项卡。

+1

你是否试图完成这个纯粹使用故事板?或者,您是否在您的应用程序委托的applicationDidFinish启动方法中设置了选项卡栏?另外,通过标签栏图标,你的意思是,在标签上点击,同时为类型A或类型B的用户显示相同的图标? –

回答

0

您需要从代码中完成,所以请看setViewControllers方法。

假如你有相应vc1vc2vc A or Bvc4 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]; 
+0

谢谢DonMag!这很好。在你的第二个解决方案中,我只需要确保self.tabBarController.viewControllers是可变的,因为它最初是一个NSArray。我这样做是这样的:NSMutableArray * a = [self.tabBarController.viewControllers mutableCopy]; –

0

你也可以放置一个容器视图在该标签的视图控制器,添加两个视图容器视图,然后根据它是什么类型的用户展示期间viewDidLoad正确的观点。

当我有时间时会添加代码。

0

这将是这样做的一种方法:

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>