0

当我单击包含我的 kal 日历的标签栏时,日历会消失:

在此处输入图像描述

这是我在 viewWillAppear 中的代码:

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    KalViewController *calendar = [[KalViewController alloc] init];
    [self.navigationController pushViewController:calendar animated:YES];
    calendar.dataSource = self;
    calendar.delegate = self;
    [calendar reloadData];
    self.tabBarController.delegate = self;
}

我也有这个方法:

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
     [self viewWillAppear:YES];
     //Even when I comment out this line the problem stays!
}

如果您需要更多信息,请询问。

编辑:

在此处输入图像描述

4

1 回答 1

2

您不正确地使用标签栏控制器。实际上,您应该使用控制器填充它(在 Interface Builder 中或通过设置选项卡栏控制器的controllers属性)并让它完成它的工作。

在另一个硬币上,请注意viewWillAppear可以多次调用,因此这是您要分配新控制器的最后一个地方。如果您已重写viewWillAppear以便控制器在显示视图时显示某些内容,那么这不是正确的方法。

编辑:

如果您以编程方式创建 UI,则应遵循以下步骤application:didFinishLaunching:来设置 rootViewController:

FirstViewController *fistVC = ...
SecondViewController *secondVC = ...
ThirdViewController *thirdVC = ...

NSArray *viewControllers = [[NSArray alloc] initWithObjects:fistVC, secondVC, thirdVC, nil];

self.tabController = [[UITabBarController alloc] init];
[self.tabController setViewControllers:viewControllers animated:YES];

self.window.rootViewController = self.tabController;

如果您在 Interface Builder 中构建您的 UI,您将以图形方式执行相同的操作,但我无法在此处重现它。

无论如何,我希望这段代码能够阐明标签栏控制器的工作方式:实例化它的所有控制器,将它们放入一个数组中,然后将数组传递给标签栏控制器。无需再实例化选项卡式控制器(既不在 viewWillAppear 也不在 viewDidLoad 中)...

于 2013-10-07T15:33:44.443 回答