【问题标题】:Storyboard navigation controller and tab bar controller故事板导航控制器和标签栏控制器
【发布时间】:2014-06-26 05:14:17
【问题描述】:

我正在尝试在 Storyboard 中进行以下设置。

一开始我有一个表格视图,当我点击一个单元格时,它需要转换到标签栏控制器,这很有效。但现在我想在最右边的 2 个控制器中添加一个标题和一个额外的导航栏按钮。

但我似乎无法将按钮拖到那里,或者在设置标题时,什么也没有显示。如何在情节提要中实现此设置?


根据以下答案更新问题。

当我有这个新设置时(因此中间有一个额外的导航控制器),我可以在情节提要中设置标题,但是在运行应用程序时,添加的标题不会显示。

我有uploaded 一个具有该设置的 Xcode 项目。也许它可以派上用场。

【问题讨论】:

  • 类似的问题你的问题解决了吗

标签: ios uinavigationcontroller storyboard uitabbarcontroller uistoryboard


【解决方案1】:

以防万一有人在寻找快速的方法:

tabBarController?.title = "Your Title"
tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right Button Title", style: UIBarButtonItemStyle.Plain, target: self, action: "rightButtonFunction")

代码最好放在viewDidAppearviewWillAppear 中,这样标题和按钮会随着不同的选项卡被按下而改变。

使用这种方法,您也不需要额外的导航控制器。

【讨论】:

    【解决方案2】:
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        if ([segue.identifier isEqualToString:@"Overview_Register"])
        {
            WDRegisterViewController *obj=(WDRegisterViewController *)[segue destinationViewController];
            obj.str_Title=@"Edit Profile";
            obj.isRegister=NO;
        }
    }
    
                [self performSegueWithIdentifier:@"Overview_Measure" sender:nil];
    
    
    
        UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        WDPeekViewController *Peek = (WDPeekViewController *)[sb instantiateViewControllerWithIdentifier:@"WDPeekViewController"];
     [self.navigationController pushViewController:tabBarController animated:YES];
    

    【讨论】:

      【解决方案3】:

      要更改 UINavigationBar 标题(无需创建另外 2 个 UINavigationController),您只需使用

      [self.parentViewController.navigationItem setTitle:@"Title"];
      

      添加右键使用

      self.parentViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(myRightButton)];
      

      关于从您的UITabBarController 引用的每个UIViewControllerviewDidLoad 方法。

      如果您想在 UIViewController 中使用 TabItems 中的“导航结构”,那么您可以将 BUFViewController.m 编辑为:

      #import "BUFViewController.h"
      
      @interface BUFViewController ()
      
      @end
      
      @implementation BUFViewController
      
      - (void)viewDidLoad
      {
          [super viewDidLoad];
          // Do any additional setup after loading the view, typically from a nib.
          [self.parentViewController.navigationController setNavigationBarHidden:YES];
          self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
      }
      
      -(void)done{
          [self.parentViewController.navigationController popToRootViewControllerAnimated:YES];
      }
      
      - (void)didReceiveMemoryWarning
      {
          [super didReceiveMemoryWarning];
          // Dispose of any resources that can be recreated.
      }
      
      @end
      

      您必须认为您的UITabBarController 在您的父级NavigationController 中,因此您想隐藏父级UINavigationBar 并显示您的父级。 之后,您就可以在父母的UINavigationController 上使用popToRootViewControllerAnimated: 返回您的餐桌。

      希望有帮助:)

      【讨论】:

      • 感谢您的回复。我已经尝试过你的想法,它有效,但它也杀死了通常会出现的“后退按钮”。 (因为它被添加到覆盖导航栏)。不知道是否有 2 个导航栏是去这里的方式。但是对于一个(我的第一个屏幕截图),我似乎无法添加标题或按钮。
      • 我看到了您的编辑,并且确实可以在代码中添加后退按钮,并且它有效。但是这里没有我想念的东西吗?这可以以更优雅的方式完成。
      • 我做了一个编辑,应该很适合你:)
      • 如果这对其他人有帮助,这里是 Swift 中的类似方法:self.navigationItem.setRightBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Search, target: self, action: "barButtonItemClicked:"), 动画:真的)
      【解决方案4】:

      我查看了您的测试应用程序,并且确实在导航栏下方非常隐约地看到了标题。如果您选择标签栏控制器,您可以看到两个导航栏,并取消选中“在顶部栏下”框。但是,这会在导航栏上给您一个奇怪的阴影。我不知道是否有一种简单的方法可以解决这个问题,但我认为这个带有两个导航栏的 UI 看起来并不好。您可能希望消除初始导航控制器,并使用模态 segue 来显示标签栏控制器。您可以向导航控制器添加一个条形按钮项,但您仍然需要解除模态视图控制器。

      【讨论】:

        【解决方案5】:

        您需要将这些视图控制器替换为UINavigationViewControllers

        删除右边的两个视图控制器。

        将 2 UINavigationViewControllers 拖放到情节提要上并按您想要的方式放置它们。

        然后,您需要将这些新的导航视图控制器挂钩到标签栏控制器。 Ctrl 单击并从标签栏控制器拖动到导航控制器。从弹出的菜单的“Relationship Segue”部分中选择“view controllers”。对两个导航控制器执行此操作。

        【讨论】:

        • 是的,我已经尝试过了(我已经更新了我的问题),因为这是我最初的想法。然后我可以在故事板构建器中放置一个标题,但是当我运行应用程序时它不会显示。
        • 您是否尝试过在情节提要的属性检查器视图中明确设置顶部栏而不是使用“推断”?
        • 如果明确设置是指使用此输入字段,则为yes。如您所见,我还可以在栏中拖出一个条形按钮。但是在运行该应用程序时,该视图只显示空导航栏。
        • 您可以更改tabBarController的标题以更新标题,同时保留导航返回按钮。 [[self tabBarController] setTitle:@"First View Controller"];。很脏,但它可以工作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 1970-01-01
        • 2011-09-18
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多