我正在从另一个UITabBarController
(HomeViewController)呈现ViewController
。 TabBarController
又包含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。!!
答案 0 :(得分:1)
您需要在目标控制器中创建一个函数(它有权解除tabBarController
),并从用户当前正在与之交互的最顶层(当前)控制器/控制器中调用该函数。要实现上述目标,您需要首先使用父视图控制器从当前控制器获取tabBarController
对象。然后获取该控制器的父视图/根视图控制器以及您在第一个控制器中创建的performSelector
(函数)。
请务必在致电doesRespondToSelector
之前检查performSelector
,以免发生任何令人讨厌的崩溃。
另一种方式,虽然非常hackie是在AppDelegate中存储第一个控制器的弱引用,并从当前控制器访问它。