按一个按钮进入第二个标签场景而不是第一个?

时间:2013-10-22 08:03:14

标签: ios xcode

我有一个带有标签控制器的应用程序,它有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];
}

1 个答案:

答案 0 :(得分:0)

编辑:

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

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

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

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

    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];
      
      }
      
    3. 您可以更改使用的通知名称,当然(@“GOHOMEPRESSED”),只要您持续使用它。

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

      此外,尝试获取此背后的逻辑:

        来自给定控制器的
      1. 您提供第二个控制器(presentViewController:Volumesapp);

      2. 这将完全带给您之前的控制器层次结构(在您的情况下,标签栏);

      3. 当你完成所提供的控制器时,你必须在呈现控制器上调用dismiss(在2 / goHome中完成的步骤),以回到(某种程度上)到你所在的地方。 / p>

      4. 希望这有帮助。

        老答案:

        如果我理解你正在尝试做什么,你需要的是使用setSelectedIndex选择标签栏控制器内部的正确子控制器;这样的事情应该有效:

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

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