[英]iOS: Showing the UIViewControllers when UITabBar and UINavigationBar buttons cliked
我是iOS的新手,因为我的项目取决于导航和UITabBar控制器。我已完成以下步骤
UITabBar包含4个按钮,导航栏包含2个按钮,即所有屏幕都通用1)首先,我已使用UITabBar控制器并向其中添加了四个按钮2)对于UITabBar的每个按钮,我都添加了导航控制器标签栏按钮所有视图均显示正常,并进入UITabBar条形按钮我正面临以下问题
假设我在UITabBar屏幕“ A”中,我单击了导航栏按钮,将导航屏幕前为“ Navscreen”,这意味着当我单击Tabbar按钮“ B”并返回UITabBar按钮时,“ A”包含“ Navscreen” “ A”仍显示“导航屏幕”
为了避免在“ Navscreen”视图控制器中出现这种情况,我在视图中添加了以下代码
-(void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSUInteger indexOfTab = [tabBarController.viewControllers
indexOfObject:viewController];
NSLog(@"Tab index = %u (%u)", indexOfTab);
if (indexOfTab==0)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
FirstViewController *firstview =
(FirstViewController *) [storyboard
instantiateViewControllerWithIdentifier:@"home"];
[self.navigationController pushViewController:firstview
animated:YES];
}
else if (indexOfTab==1)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
secondviewcontroller *secondview =
(secondviewcontroller *) [storyboard
instantiateViewControllerWithIdentifier:@"Medremainder"];
[self.navigationController pushViewController:secondview animated:NO];
}
if (indexOfTab==2)
{
UIStoryboard *storyboard = [UIStoryboard
storyboardWithName:@"Main" bundle:nil];
mymedView *mymed_view =
(mymedView *) [storyboard
instantiateViewControllerWithIdentifier:@"mymed"];
[self.navigationController pushViewController:mymed_view
animated:NO];
}
if (indexOfTab==3)
{
UIStoryboard *storyboard = [UIStoryboard
storyboardWithName:@"Main" bundle:nil];
Event_view *event_view =
(Event_view *) [storyboard
instantiateViewControllerWithIdentifier:@"Event_view"];
[self.navigationController pushViewController:event_view
animated:NO];
}
}
但是在这种情况下,当单击“导航屏幕”时,当我单击UITabBar“ B”时,我就可以获取UITabBar屏幕。如果再次单击UITabBar“ A”,我可以看到“ A”,并且当我单击UITabBar按钮时, B“应用程序崩溃。我是ios新手,如果我做错了任何事情,请帮助我,请提供正确的解决方案。
在您的didSelectViewController:
,您似乎多次将新控制器推到self.navigationController
? 每次您选择一个选项卡时,此代码都会将另一个从情节提要中加载的控制器推入已存在的控制器之上。 这可能是使您的导航项目混乱的原因。
您是否不应该只为每个选项卡分配一次单独的导航控制器,而这完全是自动的?
在情节提要/代码中,为每个选项卡分配单独的导航控制器。 在每个导航控制器中,根据您从情节提要中为每个选项卡加载的内容,使用根控制器创建它。 您只需在主控制器中的某个位置创建一次即可。 然后将导航控制器分配到情节提要或代码集中的单独选项卡中,将控制器阵列设置为您创建的导航控制器的阵列。
然后,它应该全部自动完成,而无需实现didSelectViewController:
完全没有问题,因为每个选项卡只会简单地显示相应的导航控制器及其关联的导航栏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.