iOS TabBar和导航控制器

时间:2012-10-16 15:47:09

标签: iphone objective-c ios uinavigationcontroller uinavigationbar

好的,那我该如何进行这项操作呢。

  1. 我有一个标签栏
  2. 在标签栏的一个视图控制器中有两个按钮
  3. 当我点击button1时,它应该带我到另一个屏幕,但它必须在底部有标签栏。
  4. 当我点击button2时,它应该带我到另一个屏幕,但又必须在底部有标签栏。
  5. 我试过了 1. presentModalViewController - 但它只覆盖整个屏幕 2.将第二个屏幕作为子视图添加到第一个屏幕。 - 这显示了我想要看到的第二个视图,并且底部还有标签栏。但它不起作用。这意味着我在视图中嵌入了一个滚动视图等,但在添加为子视图时却没有任何效果 3.导航控制器 - 我认为这应该是一种方式,并再次尝试在viewdidload中添加一个新的导航控制器,但程序崩溃。

     @interface SettingsViewController : UIViewController <CLLocationManagerDelegate>
        @property (nonatomic,retain) UINavigationController * navigationController;
    
     - (void)viewDidLoad
    {
        [super viewDidLoad];
        [self.view setBackgroundColor:[[ApplicationResources applicationResources]lightGreyColour]];
    self.postCodeTextField.hidden = TRUE;
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:self];
       [self.view addSubview:self.navigationController.view];
    //self.facebookSwitch
     }
    

    那么解决方案是什么?谢谢:)

1 个答案:

答案 0 :(得分:3)

presentModalViewController正是为了覆盖整个屏幕。

您似乎希望每个选项卡中都有一个导航控制器,因此每个选项卡都有自己的导航堆栈。诀窍是你应该将导航控制器添加到标签栏,然后将视图控制器添加到导航控制器。

tabbar
|
+- navigationController1
|     |
|     +- myViewController1
|
+- navigationController2
      |
      +- myViewController2

从上面的代码中,您似乎错过了UIViewController已经有一个名为navigationController的属性的点,因此您不应该自己声明它。

要正确设置导航控制器,请参阅Tab Bar Application With Navigation Controller

myViewController1作为navigationController1的根视图控制器正确插入时,您可以轻松地呈现如下的后续视图控制器:

//in myViewController1
[self.navigationController pushViewController:myViewController3 animated:YES];