1

关于 S/O 的第一个问题,如果我没有遵循任何协议,请道歉。我一直在尝试使用来自同一个 UITabBar 项目的 4 个 UIViewController 有条件地显示 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];


}

提前感谢任何知道如何做这件事的人。

4

1 回答 1

1

与其尝试替换将显示给用户的控制器,不如只替换其视图。这意味着您应该实现一个容器视图控制器:

  • 创建您的 UITabBarController 并将其中一项设置为 UIViewController
  • 把它变成一个自定义控制器并向它添加以下属性。

    @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。

于 2012-09-25T13:54:51.050 回答