IOS 加载不同根的 UiNavigationController 和 TabController
IOS load different root of UiNavigationController of TabController
我认为对此有一个简单的答案,但我似乎找不到。我有一个带有标签栏的 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 下设置根视图,这似乎会影响整个应用程序。我只想要这个有条件的申请单个选项卡按钮。
感谢您的帮助!
在 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]];
}
}
我认为对此有一个简单的答案,但我似乎找不到。我有一个带有标签栏的 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 下设置根视图,这似乎会影响整个应用程序。我只想要这个有条件的申请单个选项卡按钮。
感谢您的帮助!
在 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]];
}
}