我认为这会有一个简单的答案,但我似乎无法找到它。我有一个带有标签栏的IOS应用程序。您登录后会转到标签栏。对于其中一个标签按钮,我想根据条件显示不同的根视图。我创建了一个自定义的UiNavigationController,我设置了以下条件语句。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSString *can_post = @"yes" ;
NSLog(@"can post: %@",can_post);
if([can_post isEqualToString:@"yes"]) {
// Display UserCanPostViewController
NSLog(@"user can post");
}
else {
// Display UserCanNotPostViewController
NSLog(@"user can not post");
}
}
问题在于我似乎无法设置根视图。我能够找到的所有示例都显示如何在appdelegate下设置根视图,这似乎会影响整个应用程序。我只想要这个条件申请单个标签按钮。
感谢您的帮助!
答案 0 :(得分:1)
在App Delegate中......
设置标签栏以包含选项卡,这些标签是您正在讨论的特定标签的导航控制器...
...
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController1];
[tabBarController setViewControllers:@[navigationController,
viewController2,
viewController3,
viewController4]];
[self.window setRootViewController:tabBarController];
...
使AppDelegate成为UITabBarControllerDelegate并实现以下委托方法。
请注意,有更简洁的方法可以做到这一点,但这现在可以使用(这不是AppDelegate的工作,但你可以稍后重构,但是你想要)
...
tabBarController.delegate = self
...
在这个委托方法中......
- (void)tabBarController:(UITabBarController * nonnull)tabBarController
didSelectViewController:(UIViewController * nonnull)viewController
{
if (THIS IS NOT THE SPECIFIC TAB) return;
UINavigationController *navigationController = (UINavigationController *)viewController;
if([can_post isEqualToString:@"yes"]) {
// Display UserCanPostViewController
NSLog(@"user can post");
[navigationController setViewControllers:@[UserCanPostViewController]];
}
else {
// Display UserCanNotPostViewController
NSLog(@"user can not post");
[navigationController setViewControllers:@[UserCanNotPostViewController]];
}
}