是否可以在prepareForSegue期间修改父视图控制器中的标签栏项?基本上,我正在尝试在父控制器中插入逻辑,其中可以在segue上删除2个可能的标签栏项目之一。
我尝试过以下方面:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"identifierOfInterest"]) {
UITabBarController *tabBarController = (UITabBarController *)segue.destinationViewController;
// Attempt 1
NSMutableArray *items = [[tabBarController.tabBar items] mutableCopy];
[items removeObjectAtIndex:1];
[tabBarController.tabBar setItems:items animated:YES];
// Attempt 2
NSMutableArray *items = [[tabBarController viewControllers] mutableCopy];
[items removeObjectAtIndex:1];
[tabBarController setViewControllers:items];
}
}
不幸的是,这两条消息都会使应用程序崩溃并出现以下错误:
尝试1:
Directly modifying a tab bar managed by a tab bar controller is not allowed.
尝试2:
[UITabBarItem parentViewController]: unrecognized selector sent to instance
我正在使用Xcode 4.2,iOS 5,其中UI标签栏控制器是一个故事板对象,因此标签栏或任何东西都没有出口。
提前致谢!
答案 0 :(得分:0)
通常在TabBar应用程序中,AppDelegate拥有(或引用)标签栏控制器,因为它是“主”视图控制器。你不能隔离到标签栏视图控制器,或者至少你不应该。如果您需要让应用程序的标签栏控制器执行某些操作,请向App Delegate实例发送一条消息,该实例应该具有对标签栏控制器的引用,以执行该工作。
即。
//In View Controller handling seque
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[[[UIApplication sharedApplication] delegate] performSelector:@selector(doTabBarWork:) withObject:data];
}
//In the App delegate
-(void)doTabBarWork:(id)data
{
//The "mainTabBarController" instance needs to already be set
NSMutableArray *viewControllers = [[self.mainTabBarController viewControllers] mutableCopy];
[viewControllers removeLastObject];
[self.mainTabBarController setViewControllers:viewControllers animated:YES];
}