UISegmentedControl 以编程方式更改段数

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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)
  

【讨论】:

以上是关于UISegmentedControl 以编程方式更改段数的主要内容,如果未能解决你的问题,请参考以下文章

UISegmentedControl以编程方式更改段数

如何以编程方式将 UISegmentedControl 添加到容器视图

如何在swift上以编程方式更改uisegmentedcontrol的字体大小和字体名称?

以编程方式在 UINavigationBar 下方的 UIToolbar 中添加 UISegmentedControl

在带有 XIB 的视图控制器上以编程方式初始化 UISegmentedControl

如何以编程方式在 iPad 的工具栏中添加 UISegmentedControl