UISegmentedControl change number of segments programmatically

后端 未结 7 1173
时光说笑
时光说笑 2020-12-14 05:26

Is there a way to change the number of segments programmatically?

相关标签:
7条回答
  • 2020-12-14 05:44

    adding and deleting segments in swift4 using code

    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)
      }
    }
    
    0 讨论(0)
  • 2020-12-14 05:52

    To replace the segments entirely, you can use the following function:

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

    Hope this helps.

    0 讨论(0)
  • 2020-12-14 05:52

    work for me, UIsegmentedControll contains two segments, i want add one in index 2, use this code in swift 2.2 use:

    SEG_TipoFiltro.insertSegmentWithTitle("Title", atIndex: 2, animated: false)
    
    0 讨论(0)
  • 2020-12-14 05:56

    For the sake of completeness (and because I ended up here looking for how to achieve the same thing in xib) here is how to do it in xib:

    enter image description here

    0 讨论(0)
  • 2020-12-14 06:02

    Here is a Swift extension for replacing the segments with a sequence of strings. It’s similar to another answer given here except it can be used with any sequence, meaning you can also pass in slices, sets, etc.

    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)
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-14 06:06

    And here's a little Swift extension to replace current segmentedControl with array of new values

    Swift 3

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

    Swift 4

    extension UISegmentedControl {
        func replaceSegments(segments: Array<String>) {
            self.removeAllSegments()
            for segment in segments {
                self.insertSegment(withTitle: segment, at: self.numberOfSegments, animated: false)
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题