【问题标题】:How to place UIBarButtonItem on the right side of a UIToolbar?如何将 UIBarButtonItem 放在 UIToolbar 的右侧?
【发布时间】:2011-01-30 10:09:56
【问题描述】:

我设计了一个带有工具栏的视图,该工具栏以模态方式显示在 Interface Builder 中。我在左侧有一个 UIBarButtonItem,我希望它出现在工具栏的右侧。如何在 IB 中或通过代码执行此操作?

【问题讨论】:

    标签: iphone objective-c cocoa-touch iphone-sdk-3.0 interface-builder


    【解决方案1】:

    插入一个标识符为“灵活空间”的项目。


    (来源:xanga.com

    【讨论】:

    • 这听起来比我的更好!
    • 像魅力一样工作!很好的解决方案。
    • 当我这样做时,按钮不会出现在屏幕上。
    • 我在工具栏上添加了一些约束并修复了它。
    【解决方案2】:

    Swift 3.x 或更高版本:

    internal var textFieldHandlerToolBar: UIToolbar = {
            let tb = UIToolbar.init(frame: CGRect.init(origin: .zero, size: CGSize.init(width: UIScreen.screenSize().width, height: 44.0)))
            let flexibleButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
            let doneBarButton = UIBarButtonItem.init(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(actionDonePickerSelection))
            tb.setItems([flexibleButton, doneBarButton], animated: false)
            return tb
        }()
    

    输出:

    【讨论】:

      【解决方案3】:

      - 像这样在右边的一项

      UIBarButtonItem *flexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
      
      UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"item1” style:UIBarButtonItemStylePlain target:self action:nil];
      
      self.toolbarItems = [NSArray arrayWithObjects: flexible, item1, nil];
      

      -左右两个像这样

      UIBarButtonItem *flexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
      
      UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"item1” style:UIBarButtonItemStylePlain target:self action:nil];
      UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"item2” style:UIBarButtonItemStylePlain target:self action:nil];
      
      self.toolbarItems = [NSArray arrayWithObjects: item1, flexible, item2, nil];
      

      -三个这样的项目

      UIBarButtonItem *flexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
      
      UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"item1” style:UIBarButtonItemStylePlain target:self action:nil];
      UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"item2” style:UIBarButtonItemStylePlain target:self action:nil];
      UIBarButtonItem *item3 = [[UIBarButtonItem alloc] initWithTitle:@"item3” style:UIBarButtonItemStylePlain target:self action:nil];
      
      self.toolbarItems = [NSArray arrayWithObjects: item1, flexible, item2, flexible, item3, nil];
      

      -四个这样的项目

      UIBarButtonItem *flexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
      
      UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"item1” style:UIBarButtonItemStylePlain target:self action:nil];
      UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"item2” style:UIBarButtonItemStylePlain target:self action:nil];
      UIBarButtonItem *item3 = [[UIBarButtonItem alloc] initWithTitle:@"item3” style:UIBarButtonItemStylePlain target:self action:nil];
      UIBarButtonItem *item4 = [[UIBarButtonItem alloc] initWithTitle:@"item4” style:UIBarButtonItemStylePlain target:self action:nil];
      
      self.toolbarItems = [NSArray arrayWithObjects: item1, flexible, item2, item3, flexible, item4, nil];
      

      所以当你想添加空间时,你必须添加灵活的条形按钮。

      【讨论】:

      • 太棒了,flexible 就像padding 支持toolbar 中的其他项目。
      【解决方案4】:

      Swift 代码:

      func addDoneButton() -> UIToolbar {
          let toolbar = UIToolbar()
          let flexButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
          let doneButton = UIBarButtonItem(title: "Done", style: .Plain, target: self, action: Selector("donePressed"))
          toolbar.setItems([flexButton, doneButton], animated: true)
          toolbar.sizeToFit()
          return toolbar
      }
      

      【讨论】:

      • 当类型推断为.flexibleSpace 而不是UIBarButtonSystemItem.FlexibleSpace 并且首字母不再大写时,可以使用短点语法(例如.Plain -> .plain)。还有一个专门用于“完成”按钮的BarButtonSystemItemUIBarButtonItem(barButtonSystemItem: .done, ...)
      【解决方案5】:

      如果有人看到这篇文章,以下是如何在代码中执行此操作:

      UIBarButtonItem *leftButton = [[[UIBarButtonItem alloc] initWithTitle:@"Item" style:UIBarButtonItemStyleBordered target:self action:@selector(btnItem1Pressed:)] autorelease];
      
      UIBarButtonItem *flex = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil] autorelease];
      
      UIBarButtonItem *rightButton = [[[UIBarButtonItem alloc] initWithTitle:@"Item" style:UIBarButtonItemStyleBordered target:self action:@selector(btnItem2Pressed:)] autorelease];
      
      
      self.toolbarItems = [NSArray arrayWithObjects: leftButton, flex, rightButton, nil];
      

      【讨论】:

        【解决方案6】:

        如果您可以摆脱这不是 UIBarButtonItem(例如,信息按钮),我所做的就是将按钮的图层更改为始终位于工具栏的前面。这样,当我将按钮拖到 IB 中的工具栏上时,它不会自动将其吸入并移到左侧。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-29
          • 1970-01-01
          • 2015-08-01
          相关资源
          最近更新 更多