自定义标签栏控制器问题

时间:2015-08-09 22:44:30

标签: ios objective-c uiviewcontroller segue

目前在我的项目中,我制作了一个自定义标签栏控制器,以实现垂直标签栏效果,就像标准标签栏控制器一样。在自定义选项卡栏中,我有两个按钮与自定义segue链接到两个视图控制器。这个自定义segue的作用是用两个视图控制器替换我的自定义标签栏控制器中的子视图。

完成此操作后,我的自定义标签栏控制器在两个按钮之间切换时工作正常。但是,当我尝试将按钮放在其中一个视图控制器上并将按钮中的模态segue添加到全新的视图控制器时,会出现问题。当我按下按钮时,程序崩溃了。

我认为问题可能是视图控制器层次结构问题。另一方面,我创建了一个具有相同故事板结构和自定义segue的新项目,这次,当我在一个视图控制器中放置一个按钮并使用模态segue连接到新的视图控制器时,它可以工作,但是警告说“不鼓励在分离的视图控制器上显示视图控制器”。

我现在很困惑。有人能指出我正确的方向吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

也许这不会有那么大的帮助,但如果您以编程方式执行此操作,这是一种方法,您可以将此答案解释为Storyboards:

-(void)dismiss
{
    [[self navigationController] dismissViewControllerAnimated:true completion:nil];
}

-(void)showModal
{
    NewCustomViewController * pvc = [NewCustomViewController new];
    CustomNavigationController * ffs = [[CustomNavigationController alloc] initWithRootViewController:pvc];
    [ffs setNavigationBarHidden:TRUE];
    UIBarButtonItem * backBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"exit-button"] style:UIBarButtonItemStylePlain target:self action:@selector(dismiss)];
    [[pvc navigationItem] setLeftBarButtonItem:backBarButtonItem];
    [[self navigationController] presentViewController:ffs animated:true completion:nil];
}

我以前创建了自己的UITabBarController并成功地使用了同样的方法从自定义UITabBarController子类进行模态演示,试一试,我知道它不是故事板,但是它是类似。事实上,让我改变一些事情,让你更容易。

另外,你的viewcontrollers是否嵌套在custaom标签栏的navigationControllers中?

应该是这样的

UItabbarcontroller
   navigationcontroller
       viewcontroller
   navigationcontroller
       viewcontroller

this works the easiest, also, could be even better like this:

navigationController <== mainscreen rootViewController as a navigationController in the AppDelegate
   UItabbarcontroller
      navigationcontroller
          viewcontroller
      navigationcontroller
          viewcontroller

现在,你说tabbar没有嵌套在导航控制器内吗?所以我们在谈论这个:

应该是这样的

UItabbarcontroller
   navigationcontroller
       viewcontroller
   navigationcontroller
       viewcontroller

这个问题是,如果我从UItabbarcontroller子类调用一个模态并执行:

    self.navigationController present XXX etc. etc, 

然后这会失败,因为tabbarcontroler没有导航控制器

此外,如果您使用导航控制器从其中一个veiwcontrollrs调用segue导航并尝试self.navigationctonroller存在,那么您有同样的问题,那里没有navigaitoncontroller。

您尝试从

呈现模态
  [self present ... blah blah

但这样做不会允许用户从呈现的模态中进行交互,因为它没有在导航控制器中显示,我会将你的TabbarView控制器粉碎成一个导航控制器,它不应该那么难,然后我就会#39 ;首先在您的tabbar中将您的viewcontrollers置于Navigationcontroller中,然后再次尝试这些按钮,这只是另外三个导航控制器,没什么大不了的。