【问题标题】:How do I add a UISegmentedControl to my UIToolbar using Storyboard?如何使用 Storyboard 将 UISegmentedControl 添加到我的 UIToolbar?
【发布时间】:2012-06-19 19:25:13
【问题描述】:
  1. 我正在尝试将分段控件添加到下面的 UIToolbar 中,但是当我尝试在 Storyboard 中将其拖动时,它会替换我的表格视图。
  2. 另外,当我尝试将 UIBarButton 添加到我的工具栏时,它会将我的原型单元格向下推...我的视图层次结构有误吗?
  3. 当我添加 UIBarButton 项时,在模拟器中,工具栏不是黑色透明的,因为我在导航控制检查器中设置。那是怎么回事?

谢谢!

【问题讨论】:

  • 没有正确阅读问题,抱歉。
  • 更新了我的答案,希望对您有所帮助。

标签: ios storyboard uitoolbar uisegmentedcontrol


【解决方案1】:

我通过将 UISegmentedController 放置在 Bar Button Item 中来做到这一点。

向 UINavigationController 窗口添加一个工具栏,然后在 ViewController 屏幕上启用此工具栏的显示。

将一个条形按钮拖入 ViewController 屏幕上的工具栏,然后将一个 UISegmentedController 拖入其中(将按钮的大小调整为屏幕的整个宽度)

要将其全部连接起来,从 UISegmentedController 按住 ctrl 并拖动到相应的 .h 文件,从“引用插座”拖动到黄色视图控制器图标(使用相同的变量名),然后从“ValueChanged”拖动到黄色图标(选择控制器上要在新选择中调用的方法)。

这一切似乎都按预期工作。 (如果你不能在控制器上选择一个段来设置一个初始值,你没有按照上面的描述连接参考插座。这让我有点难过。)

【讨论】:

    【解决方案2】:

    要使用 Interface builder 在工具栏中创建 Segmented Control 元素,可以使用以下提示

    1) 在导航控制器中创建分段控制栏按钮项

    2) 将Bar Button Item拖到Navigation Item

    3) 那么你应该得到如下结构

    4) 现在你可以选择Segmented Control来设置它的属性

    【讨论】:

      【解决方案3】:

      1 - 以编程方式进行。您需要先为 UIToolbar 分配一个框架,然后您可以在其中添加元素(segmentedControl)。我建议尽管使用UIBarButtonItems,它们基本上是相同的。

      要将其粘在底部,请尝试这样做:

      #define SCREEN_FRAME [[UIScreen mainScreen] applicationFrame]
      
      CGRect frame = CGRectMake(0, [[UIScreen mainScreen] bounds].size.height - 44, [[UIScreen mainScreen] bounds].size.width, 44);
      UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:frame];
      toolBar.frame = CGRectMake(0,self.view.frame.size.height-toolBar.frame.size.height,SCREEN_FRAME.size.width,toolBar.frame.size.height);
      
      //Setting up the items
      
      UIBarButtonItem *first = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(yourAction:)] autorelease]; 
      UIBarButtonItem *second = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(yourAction:)] autorelease]; 
      
      //Creating an array with the items
      NSArray *items = [NSArray arrayWithObjects:first,second, nil];
      
      //Assigning the array to the toolBar
      [toolBar setItems: items];
      

      然后你可以设置它的样式

      mytoolbar.barStyle = UIBarStyleBlack;
      

      2 - 同上,取景。

      3 - 您需要将您的 navigationController 样式设置为黑色。
      使用self.navigationController.navigationBar.style = UIBarStyleBlack; ,或者在 IB 中选择按钮并从 Inspector 中将 Tint 或 Style 设置为您想要的任何内容。

      也检查this问题

      【讨论】:

      • 我如何让它始终粘在屏幕底部?现在它随着表格滚动而滚动
      • 嗯,还是不粘底?我将工具栏添加到视图中,如下所示: [self.view addSubview:toolbar];
      • 你在使用 UITableView 吗?如果是这样[self.tableView addSubview:toolbar];
      • 试过了,还是不行。是的,使用表格视图。我认为在情节提要中拖动 TVController 会自动创建电视。
      • 是的,请尝试为它设置一个出口。 IBOutlet UITableView *tableView;
      【解决方案4】:

      我想这里有一个导航视图控制器。他们有自己的工具栏,但它是隐藏的和空的。您看到的工具栏只是一个工具栏的模拟,目的是让您编辑 UI。

      因此,要使用情节提要执行此操作,请不要将分段控件添加到模拟工具栏,创建一个新工具栏并将其添加到控制器中可用的视图树中(作为表视图的同级)并创建一个IBOutlet 来引用它。然后在您的 viewDidLoad 方法中将工具栏中的项目分配给视图控制器已经创建的工具栏。

      在这个例子中,我在视图控制器上创建了一个属性,称为(巧妙地)工具栏:

      @property (nonatomic, retain) IBOutlet UIToolbar toolbar;
      

      在我的视图控制器的实现中,我手动分配工具栏项:

      -(void)viewDidAppear:(BOOL)animated 
      {
          [self setToolbarItems:self.toolbar.items animated:NO];
          [self.navigationController setToolbarHidden:NO animated:YES];
      }
      

      当视图控制器弹出时,您需要隐藏工具栏,例如在调用视图控制器中:

      -(void)viewWillAppear:(BOOL)animated
      {
          [self.navigationController setToolbarHidden:YES animated:YES];
      }
      

      当然,假设你想隐藏它。

      【讨论】:

      • 取消删除并编辑了这个答案,因为我认为它仍然相关。
      • 当我将它添加为同级时,它实际上并没有显示在情节提要或模拟器中。它是否被表格视图隐藏了?
      • 是的,它不会显示在任何地方。但是您仍然可以引用 IBOutlet - 这只是一种方便,因此您不必在代码中创建项目和数组。然后,如果您使用我给出的代码,这些项目将出现在控制器的默认工具栏中。
      猜你喜欢
      • 2014-10-22
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 2011-09-21
      • 2010-11-12
      相关资源
      最近更新 更多