0

在prepareForSegue期间是否可以修改父视图控制器中的标签栏项目?基本上,我试图在父控制器中插入逻辑,其中两个可能的选项卡栏项目之一可能会在 segue 时被删除。

我已经尝试了一些类似的东西:

- (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 标签栏控制器作为情节提要对象,因此标签栏或任何东西都没有出口。

提前致谢!

4

1 回答 1

0

通常在 TabBar 应用程序中,AppDelegate 拥有(或引用)标签栏控制器,因为它是“主”视图控制器。您不能使用标签栏视图控制器,或者至少您不应该这样做。如果您需要让应用程序的标签栏控制器执行某些操作,请向应用程序委托实例发送一条消息,该实例应具有对标签栏控制器的引用,以执行该工作。

IE

//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];
}
于 2012-09-05T17:41:09.427 回答