为什么我需要点击tabBarViewController项目两次导航到不同的视图控制器 - iOS

时间:2017-11-08 07:27:53

标签: ios objective-c uitabbarcontroller uitabbaritem tabbarcontroller

我正在使用“我的菜单”屏幕上有TabBar的应用程序。 它有5个视图控制器(5个选项卡)。我分别在索引3和4分配2个视图控制器,这样如果我点击这两个中的任何一个,它们将导航到他们想要的视图控制器。

如果我第一次在标签栏中选择一个项目,那么每件事都很有效。 但是,当我回到该视图控制器并尝试再次按下它时,该项目被选中进行第一次单击,但不会导航到视图控制器。我必须再次单击它以执行相同的操作。即我必须点击两次导航。

我在这里发布了一些关于我的问题的代码。

//...In my appdelegate class
CalenderScreen *calender=[[CalenderScreen alloc]initWithNibName:@"CalenderScreen" bundle:nil];
    NewsScreen *news=[[NewsScreen alloc]initWithNibName:@"NewsScreen" bundle:nil ];

    UINavigationController *nav1=[[UINavigationController alloc]initWithRootViewController:menu];
    UINavigationController *nav2=[[UINavigationController alloc]initWithRootViewController:emergency];
    UINavigationController *nav4=[[UINavigationController alloc] initWithRootViewController:help];
    UINavigationController *nav3=[[UINavigationController alloc]initWithRootViewController:calender];
    UINavigationController *nav5 =[[UINavigationController alloc]initWithRootViewController:news];

//tab bar initialization
tab=[[UITabBarController alloc]init];
    tab.viewControllers=[[NSArray alloc]initWithObjects:nav1,nav2,nav4,nav5,nav3 ,nil];
    UITabBarItem *tabItem = [[[tab tabBar] items] objectAtIndex:0];
    [tabItem setTitle:@"Menu"];
    tabItem.image=[UIImage imageNamed:@"Menu.png"];
    UITabBarItem *tabItem1 = [[[tab tabBar] items] objectAtIndex:1];
    [tabItem1 setTitle:@"Emergency"];
    tabItem1.image=[UIImage imageNamed:@"Emergency.png"];
    UITabBarItem *tabItem2 = [[[tab tabBar] items] objectAtIndex:2];
    [tabItem2 setTitle:@"HelpLine"];
    tabItem2.image=[UIImage imageNamed:@"helpline.png"];
    UITabBarItem *tabItem3 = [[[tab tabBar] items] objectAtIndex:3];
    [tabItem3 setTitle:@"News"];
    tabItem3.image=[UIImage imageNamed:@"News.png"];
    UITabBarItem *tabItem4 = [[[tab tabBar] items] objectAtIndex:4];
    [tabItem4 setTitle:@"Raise Ticket"];
    tabItem4.image=[UIImage imageNamed:@"ticket.png"];

     self.window.rootViewController=tab;

    [self.window makeKeyAndVisible];

在我的视图控制器类中,我有以下代码

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NewsScreen *news=[[NewsScreen alloc] initWithNibName:@"NewsScreen" bundle:nil];

if (tabBarController.selectedIndex==3)
{
    NSUInteger index=3; //assign value here
    UINavigationController *nv = [[tabBarController viewControllers] objectAtIndex:index];//index of your NewsScreen controller
    [tabBarController setSelectedIndex:3];

    NSArray *array =[nv viewControllers];
    for (news in array)
    {
        if ([news isKindOfClass:[NewsScreen class]])
        {
            news.loginbacklbl.hidden=YES;
        }
    }
}

我担心的是,当我第一次点击NewsScreen时,它运行正常。但当我回来并尝试单击tabBar上的NewScreen项目时,它需要两次点击才能完成事件。任何人都可以帮助我为什么会这样,以及应该采取什么措施来避免这个问题。请帮帮我。 任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

单击可用于激活当前选项卡&双击去root ...告诉客户端这是默认行为。

如果您仍想覆盖,则必须制作自定义标签栏。