与单个 UITabbar 项目的多个关系 iOS / Objective-C?
Multiple Relationships to one single UITabbar Item iOS / Objective-C?
有谁知道单个标签栏项目是否可以有多个关系?
我希望能够从一个 UITabbar 图标定向到两个不同的视图控制器,具体取决于登录的用户类型。
例如,如果用户以用户类型 "A" 登录,我希望选项卡栏图标指向配置文件视图控制器。如果用户以用户类型 "B" 登录,我希望相同的图标指向设置视图控制器。
我尝试将额外的视图控制器连接到标签栏,它只是在标签栏上创建了一个额外的 icon/tab。
您需要从代码中完成,因此请查看 setViewControllers
方法。
假设您有 4 个标签对应于 vc1
vc2
vc A or B
和 vc4
...
您可以确定要分配的 VC,然后实例化完整的 "set" 控制器:
// 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];
或者...节省 "manually" 实例化控制器...
您可以在故事板中分配所有 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];
您还可以在该选项卡的视图控制器中放置一个容器视图,向容器视图添加两个视图,然后根据用户类型在 viewDidLoad
期间显示正确的视图。
有空再补代码
这是一种方法:
一个。跟踪持有变量的用户登录类型,从您之前的 viewController 传递或集中保存在数据对象中:
bool userCanAccessProfile = false;
乙。根据上面的布尔值,相应地更新您的布局和逻辑代码:
//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 是否为真,如果是,你相应地设置了不同的文本和图像。
C。当用户点击该项目时,您将再次查询 bool 以找出要做什么:
- (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>
有谁知道单个标签栏项目是否可以有多个关系?
我希望能够从一个 UITabbar 图标定向到两个不同的视图控制器,具体取决于登录的用户类型。
例如,如果用户以用户类型 "A" 登录,我希望选项卡栏图标指向配置文件视图控制器。如果用户以用户类型 "B" 登录,我希望相同的图标指向设置视图控制器。
我尝试将额外的视图控制器连接到标签栏,它只是在标签栏上创建了一个额外的 icon/tab。
您需要从代码中完成,因此请查看 setViewControllers
方法。
假设您有 4 个标签对应于 vc1
vc2
vc A or B
和 vc4
...
您可以确定要分配的 VC,然后实例化完整的 "set" 控制器:
// 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];
或者...节省 "manually" 实例化控制器...
您可以在故事板中分配所有 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];
您还可以在该选项卡的视图控制器中放置一个容器视图,向容器视图添加两个视图,然后根据用户类型在 viewDidLoad
期间显示正确的视图。
有空再补代码
这是一种方法:
一个。跟踪持有变量的用户登录类型,从您之前的 viewController 传递或集中保存在数据对象中:
bool userCanAccessProfile = false;
乙。根据上面的布尔值,相应地更新您的布局和逻辑代码:
//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 是否为真,如果是,你相应地设置了不同的文本和图像。
C。当用户点击该项目时,您将再次查询 bool 以找出要做什么:
- (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>