【问题标题】:UISegmentedControl change number of segments programmaticallyUISegmentedControl 以编程方式更改段数
【发布时间】:2012-07-23 05:49:59
【问题描述】:

有没有办法以编程方式更改段数?

【问题讨论】:

    标签: ios uikit uisegmentedcontrol


    【解决方案1】:

    是的,你可以使用

    removeSegmentAtIndex:(NSUInteger) animated:(BOOL)
    

    insertSegmentWithTitle:(NSString *) atIndex:(NSUInteger) animated:(BOOL)
    

    【讨论】:

    • 我解决了:[self.SegmentAnswer insertSegmentWithTitle:@"5" atIndex:4 animated:YES]; [self.SegmentAnswer insertSegmentWithTitle:@"6" atIndex:5
    【解决方案2】:

    要完全替换段,可以使用以下函数:

    - (void)setSegments:(NSArray *)segments
    {
        [segmentController removeAllSegments];
    
        for (NSString *segment in segments) {
            [segmentController insertSegmentWithTitle:segment atIndex:segmentController.numberOfSegments animated:NO];
        }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 这非常适合放入 UISegmentedControl 类别。谢谢!
    • 您可以使用 [segmentController removeAllSegments] 代替 while 循环。请参阅developer.apple.com/library/ios/documentation/UIKit/Reference/… 上的文档
    • 仔细检查一下,它适用于 7.X 和 8.X 是吗?
    • 根据@MCR 的评论编辑为使用[segmentController removeAllSegments]
    【解决方案3】:

    为了完整起见(因为我最终在这里寻找如何在 xib 中实现相同的目标)这里是如何在 xib 中做到这一点:

    【讨论】:

      【解决方案4】:

      这里有一个小的 Swift 扩展,用新值数组替换当前的 segmentedControl

      斯威夫特 3

      extension UISegmentedControl {
          func replaceSegments(segments: Array<String>) {
              self.removeAllSegments()
              for segment in segments {
                  self.insertSegmentWithTitle(segment, atIndex: self.numberOfSegments, animated: false)
              }
          }
      }
      

      斯威夫特 4

      extension UISegmentedControl {
          func replaceSegments(segments: Array<String>) {
              self.removeAllSegments()
              for segment in segments {
                  self.insertSegment(withTitle: segment, at: self.numberOfSegments, animated: false)
              }
          }
      }
      

      【讨论】:

        【解决方案5】:

        为我工作,UIsegmentedControll 包含两个段,我想在索引 2 中添加一个,在 swift 2.2 中使用此代码:

        SEG_TipoFiltro.insertSegmentWithTitle("Title", atIndex: 2, animated: false)
        

        【讨论】:

          【解决方案6】:

          这是一个用字符串序列替换段的 Swift 扩展。它类似于这里给出的another answer,除了它可以与任何序列一起使用,这意味着你也可以传入切片、集合等。

          extension UISegmentedControl {
          
              /// Replace the current segments with new ones using a given sequence of string.
              /// - parameter withTitles:     The titles for the new segments.
              public func replaceSegments<T: Sequence>(withTitles: T) where T.Iterator.Element == String {
                  removeAllSegments()
                  for title in withTitles {
                      insertSegment(withTitle: title, at: numberOfSegments, animated: false)
                  }
              }
          }
          

          【讨论】:

          • 您可以添加指向您所指的其他答案的链接吗?您可以通过点击其下方的“分享”链接获得答案的永久链接。
          【解决方案7】:

          使用代码在swift4中添加和删除段

          class ViewController: UIViewController {
          
            @IBOutlet weak var segment1: UISegmentedControl!
          
            override func viewDidLoad() {
              super.viewDidLoad()
              // Do any additional setup after loading the view, typically from a nib.
            }
          
            @IBAction func insert(_ sender: Any) {  
              segment1.insertSegment(withTitle: "\(segment1.numberOfSegments+1)", at: segment1.numberOfSegments, animated: true)  
            }
          
            @IBAction func remove(_ sender: Any) {  
              segment1.removeSegment(at: segment1.numberOfSegments-1, animated: true)
            }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-05-17
            • 1970-01-01
            • 1970-01-01
            • 2013-01-07
            • 1970-01-01
            • 2011-11-21
            • 2012-04-06
            相关资源
            最近更新 更多