web-dev-qa-db-ja.com

UISegmentedControlはプログラムでセグメントの数を変更します

4つのセグメントを持つSegmentedAnswerというビューにUISegmentedControlがあります。セグメントの数をプログラムで変更する方法はありますか?どうもありがとう!

63
Beppino66

はい、使用できます

removeSegmentAtIndex:(NSUInteger) animated:(BOOL)

そして

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

セグメントを完全に置き換えるには、次の機能を使用できます。

- (void)setSegments:(NSArray *)segments
{
    [segmentController removeAllSegments];

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

お役に立てれば。

42
Zorayr

そして、現在のsegmentedControlを新しい値の配列で置き換えるためのちょっとしたSwift拡張機能

スイフト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)
        }
    }
}
20
kernelpanic

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)
        }
    }
}
3
user7828620

完全を期すために(そしてxibで同じことを実現する方法を探してここにたどり着いたため)、xibでそれを行う方法を次に示します。

enter image description here

2
simon_smiley

私のために働いて、UIsegmentedControllには2つのセグメントが含まれています。インデックス2に1つ追加しますSwift 2.2 use:

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