从其中一个UINavigationControllers中解除TabBarController并返回到提供TabBarController的Controller

时间:2013-12-12 11:36:55

标签: ios iphone uinavigationcontroller uitabbarcontroller

我正在从另一个UITabBarController(HomeViewController)呈现ViewControllerTabBarController又包含UINavigationControllers。但是,当其中一个导航控制器用户按下主页按钮时,他需要转到ViewController所在的原始TabBarController

** tabBarController不是我窗口的rootViewController。

这是我的代码。

AppDelegate中,我正在创建和配置我的TabBarController

self.custCareVC = [[CustomerCareViewController alloc] initWithNibName:@"CustomerCareViewController_iPhone" bundle:NULL];
        self.POController = [[PurchaeOrderViewController alloc] initWithNibName:@"PurchaeOrderViewController_iPhone" bundle:NULL];
        self.accAndContactsController = [[AccountsAndContactsViewController alloc] initWithNibName:@"AccountsAndContactsViewController_iPhone" bundle:NULL];

self.customerCareNavController = [[UINavigationController alloc] initWithRootViewController:self.custCareVC];
    self.customerCareNavController.title = @"Customer Service";

    self.purchaseOrderNavController = [[UINavigationController alloc] initWithRootViewController:self.POController];
    self.purchaseOrderNavController.title = @"PO";

    self.accAndContactsNavController = [[UINavigationController alloc] initWithRootViewController:self.accAndContactsController];
    self.accAndContactsNavController.title = @"Accounts And Contacts";

    self.tabBarController = [[UITabBarController alloc] init];

    //self.tabBarController.tabBar.backgroundImage = [UIImage imageNamed:@"bluehead.png"];

    self.tabBarController.viewControllers = [NSArray arrayWithObjects:self.customerCareNavController, self.accAndContactsNavController, self.purchaseOrderNavController, nil];

在我的HomePageViewController中,我以下列方式呈现它(点击按钮):

AppDelegate *appDel = [[UIApplication sharedApplication] delegate];
    appDel.tabBarController.delegate = self;
    [self presentViewController:appDel.tabBarController animated:YES completion:NULL];

现在我需要在用户按下任何导航控制器上的Button(显示在tabBarController中)后再解除我的tabBarController,并再次显示HomeViewController。!!

1 个答案:

答案 0 :(得分:1)

您需要在目标控制器中创建一个函数(它有权解除tabBarController),并从用户当前正在与之交互的最顶层(当前)控制器/控制器中调用该函数。要实现上述目标,您需要首先使用父视图控制器从当前控制器获取tabBarController对象。然后获取该控制器的父视图/根视图控制器以及您在第一个控制器中创建的performSelector(函数)。

请务必在致电doesRespondToSelector之前检查performSelector,以免发生任何令人讨厌的崩溃。

另一种方式,虽然非常hackie是在AppDelegate中存储第一个控制器的弱引用,并从当前控制器访问它。