当我点击保存我的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!
}
如果您需要更多信息,请询问。
编辑:
答案 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中)......