【问题标题】:Custom Tab Bar Controller Problems自定义标签栏控制器问题
【发布时间】:2015-11-01 18:39:29
【问题描述】:

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

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

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

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

提前致谢!

【问题讨论】:

    标签: ios objective-c uiviewcontroller segue


    【解决方案1】:

    也许这不会有太大帮助,但如果您以编程方式执行此操作,这是一种方法,您可以将这个答案解释为 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 子类进行模态表示,试试吧,我知道它不是故事板,但它是相似的。事实上,让我更改一些内容,让您更轻松。

    另外,您的视图控制器是否嵌套在自定义标签栏中的 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
    

    现在,您说标签栏没有嵌套在导航控制器中,对吧?所以我们正在谈论这个:

    应该是这样的

    UItabbarcontroller
       navigationcontroller
           viewcontroller
       navigationcontroller
           viewcontroller
    

    问题在于,如果我从 UItabbarcontroller 子类调用模态并执行以下操作:

        self.navigationController present XXX etc. etc, 
    

    那么这将失败,很有可能是因为 tabbarcontroler 没有 navigationController

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

    你尝试从

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

    但是这样做不会允许来自呈现的模式的用户交互,因为它没有在导航控制器中呈现,我会将你的 TabbarViewcontroller 粉碎成一个导航控制器,它不应该那么难,然后我会将你的视图控制器植根首先在 Navigationcontroller 中的标签栏,然后再次尝试这些按钮,这只是三个额外的导航控制器,没什么大不了的

    【讨论】:

    • 感谢您的回复。我还是很困惑。对于您的问题,我的标签栏视图控制器不会嵌套在导航控制器中
    • 啊哈!好吧,这让事情变得复杂了。因此,将标签栏控制器嵌套在导航控制器中并不难,因此我建议这样做,请稍后再阅读我的答案
    • 再次感谢您写得很好的评论!所以基本上我现在应该尝试将我的标签栏控制器和我的两个视图控制器嵌入到导航控制器中,然后按照常规方法。
    • 目前,我正在使用以下代码将根视图控制器(标签栏所在的位置)中的子视图替换为视图控制器: tabBarController.currentViewController = destViewController; [tabBarController.placeholder addSubview:destViewController.view];
    • 是的,在你的问题中显示出来,看看我能不能帮忙
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    相关资源
    最近更新 更多