关于S / O的第一个问题,如果我没有遵循任何协议,请道歉。我一直试图使用同一个UITabBar项目中的4个UIViewControllers有条件地显示4种不同类型的场景。它必须是TabBar上的相同项目,因为使用的UIViewController依赖于数据而不是用户选择。
我知道不建议继承UITabBarController,因此我设置了一个UIViewController来处理所需场景的条件选择(参见下面的代码)。这很好用,但尽管尝试了我能想到的一切,却无法在新选择的视图的底部显示TabBar。我也尝试过使用UINavigation控制器,但这不太成功。在Storyboard中,我尝试了设置视图大小和演示样式的所有不同排列,在模拟指标中将底栏更改为标签栏并尝试使用Segues。没有人产生必要的结果。
- (void)viewDidLoad
{
[super viewDidLoad];
int m = 1;
UIViewController *viewController;
if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12 ) {
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"M31TVC"];
}else if (m == 4 || m == 6 || m == 9 || m == 11 ){
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"M30TVC"];
}else if (m == 13 ){
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"M29TVC"];
}else if (m == 2 ){
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"M28TVC"];
}else {
// error code here
}
viewController.hidesBottomBarWhenPushed = NO;
[self presentViewController:viewController animated:NO completion:nil];
}
提前感谢任何知道如何做这件事的人。
答案 0 :(得分:1)
您应该只替换其视图,而不是尝试替换将向用户显示的控制器。这意味着您应该实现一个容器视图控制器:
将其添加到自定义控制器中并向其添加以下属性。
@property (nonatomic, strong) IBOutlet UIView *currentView
@property (nonatomic, strong) UIViewController *currentViewController
将UIView添加到情节提要板中的控制器并将其连接到* currentView插座。
现在,每当用户在您的应用中达到此点时,您将执行以下操作:
UIViewController *viewController;
if (month == 1 || 3 || 5 || 7 || 8 || 10 || 12 ) {
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"M31TVC"];
}else if (month == 4 || 6 || 9 || 11 ){
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"M30TVC"];
}else if (month == 13 ){
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"M29TVC"];
}else if (month == 2 ){
viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"M28TVC"];
}else {
// error code here
}
[self addChildViewController:viewController];
[viewController didMoveToParentViewController:self];
if (self.currentViewController){
[self.currentViewController willMoveToParentViewController:nil];
[self transitionFromViewController:self.currentViewController toViewController:viewController duration:0 options:UIViewAnimationOptionTransitionNone animations:^{
[self.currentViewController.view removeFromSuperview];
[self.currentView addSubview:viewController.view];
} completion:^(BOOL finished) {
[self.currentViewController removeFromParentViewController];
self.currentViewController = viewController;
}];
} else {
[self.currentView addSubview:viewController.view];
self.currentViewController = viewController;
}
这是我在我的应用程序上创建的自定义选项卡式控制器,而不是使用默认的UITabBarController。