来自UINavigationController内部的UITabBarController的popView

时间:2010-05-05 01:10:02

标签: iphone xcode uinavigationcontroller uitabbarcontroller popviewcontroller

我正在构建一个基于Xcode的Utility模板的应用程序,我已经添加了一些更多的视图。我的申请结构如下:

  • MainView(应用程序菜单)

    • 翻转侧视图(计算器)

    • 的UINavigationController

    • 设置视图

      • viewDiDLoad:UITabBarController

                - Tab1 view (options)
                - Tab2 view (information text)
        

我可以从我的MainView正确导航到我的Flip端视图,这也是导航控制器的根视图。从我的翻转侧视图中,我推送了我的导航控制器(设置视图)的第二个视图,该视图配置为在加载时使用两个选项卡显示UITabBarController(使用viewDidLoad)。

如果我删除UITabBarController,我可以使用“设置”视图中的“popViewController”向我的Flip端视图返回没有问题。如果我在我的设置视图中的viewDiDLoad中加载UITabBarController,问题就出现了...标签工作正常,但我无法再返回我的翻转侧视图(导航控制器的根视图)。

如果我使用导航控制器的导航栏,我可以返回,但我想配置自己的按钮并隐藏导航栏。

到目前为止,我已尝试过以下方法:

  • [self.navigationController popViewControllerAnimated:YES];

  • [self.navigationController popToRootViewControllerAnimated:YES];

  • [self.navigationController popToViewController:FlipSideViewController animated:YES];

但它们似乎不起作用。前两个什么都不做(屏幕保持原样),第三个不识别“FlipsideViewController”(也许是因为它是MainViewController的委托?)。

如果我激活它,有没有办法检查导航栏的“后退”按钮是什么?

我应该使用代表吗?

我可以从两个Tab视图中的任何一个调用我的设置视图中的popViewController方法吗?

这是我的翻转视图:

- (IBAction)showSettingsView {
    SettingsViewController *controller = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil];
    controller.title = @"Settings";
    [self.navigationController pushViewController:controller animated:YES];
    [controller release];
}

这是我的设置视图:

- (void)viewDidLoad {
    [super viewDidLoad];

    tabBarController = [[UITabBarController alloc] init];

    Tab1ViewController* vc1 = [[Tab1ViewController alloc] init];
    Tab2ViewController* vc2 = [[Tab2ViewController alloc] init];

    NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, nil];
    tabBarController.viewControllers = controllers;

    [self.view addSubview:tabBarController.view];
}

要在其中一个标签视图中返回的方法:

- (IBAction)backFromTab1View {
    [self.navigationController popToViewController:FlipSideViewController animated:YES];
}

非常感谢,如果问题太基础,我很抱歉!

1 个答案:

答案 0 :(得分:0)

我实际上解决了在“设置”视图中创建我自己的UINavigationBar并使用:

的问题
[self.view insertSubview:tabBarController.view belowSubview:myNavigationBar];

将视图的其余部分插入导航栏下方,我仍然可以使用它来配置弹出视图并返回上一屏幕的按钮。

我花了一段时间才意识到“addSubview”和“inserSubview + belowSubview”之间的区别。对不起!