0

我有一个带有选项卡控制器的应用程序,它有 3 个选项卡式场景。第一个是带有静态图形和一些文本标签的介绍。第二个从可选择应用的可滚动列表开始,并包含多个故事板,每个故事板都包含一个单独的应用程序。这些“子”应用程序中的每一个都包含一个按钮,在我添加选项卡控制器之前,该按钮会将用户带回当前第二个选项卡中的滚动列表。自从我在选项卡控制器中添加后,下面的代码将我带回到第一个(介绍)场景。有没有办法让按钮转到第二个选项卡场景而不是第一个?

- (void) goHome: (id)sender
{
    UIStoryboard *Main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *mainScreen = [Main instantiateInitialViewController];
    mainScreen.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentViewController:mainScreen animated:YES completion:nil];
}
4

1 回答 1

0

编辑:

鉴于您在评论中的解释,我认为最好的方法是使用通知。那是:

  1. 当在一个子应用控制器中按下“goHome”按钮时,会发布一条通知;

  2. 应用列表控制器已注册以处理此类通知,因此在按下按钮时会收到通知并可以执行所需的操作。

这或多或少看起来像这样:

  1. 在您的子应用控制器中:

    - (void) goHome: (id)sender {
    
        NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
        [notificationCenter postNotificationName:@"GOHOMEPRESSED" object:nil userInfo:nil];
    
    }
    
  2. 在您的应用列表控制器中:

    - (void)viewDidLoad {
    
       ...
    
       [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(goHome)
                                                 name:@"GOHOMEPRESSED"
                                               object:nil];
    
       ...
    }
    
    - (void)goHome {
    
        [self dismissViewControllerAnimated:YES completion:NULL];
    
    }
    

当然,您可以更改使用的通知名称 (@"GOHOMEPRESSED"),前提是您始终使用它。

不要忘记在你的应用列表控制器的dealloc方法中删除观察者(我把这个留给你)。

另外,尝试了解这背后的逻辑:

  1. 从给定的控制器中,您呈现第二个控制器 ( presentViewController:Volumesapp);

  2. 这将使您完全脱离以前的控制器层次结构(在您的情况下,是标签栏);

  3. 当您完成所呈现的控制器后,您必须调用dismiss正在呈现的控制器(在 2/goHome 中完成的步骤),以返回(某种程度)您所在的位置。

希望这可以帮助。

旧答案:

如果我正确理解您要执行的操作,则您需要使用 ; 在标签栏控制器内选择正确的子控制器setSelectedIndex;像这样的东西应该工作:

- (void) goHome: (id)sender
{
    [self.tabBarController setSelectedIndex:2];
}

您当前的解决方案将简单地将您当前的控制器与模态呈现的新控制器实例重叠。所以,你没有正确地去第一个场景,用你的措辞,你完全是在现有场景之上实例化一个新场景。

于 2013-10-22T08:08:25.187 回答