单击Tab时,Kal Calender消失

时间:2013-10-07 15:20:25

标签: ios uitabbar kal

当我点击保存我的kal日历的标签栏时,日历会消失:

enter image description here

这是我在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!
}

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

编辑:

enter image description here

1 个答案:

答案 0 :(得分: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中)......