wake-up-neo.com

UISegmentedControl ändert die Anzahl der Segmente programmgesteuert

Ich habe ein UISegmentedControl in einer Ansicht namens SegmentedAnswer mit vier Segmenten. Gibt es eine Möglichkeit, die Anzahl der Segmente programmgesteuert zu ändern? Danke vielmals!

63
Beppino66

Ja, du kannst verwenden

removeSegmentAtIndex:(NSUInteger) animated:(BOOL)

Und

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

Um die Segmente vollständig zu ersetzen, können Sie die folgende Funktion verwenden:

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

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

Hoffe das hilft.

42
Zorayr

Und hier ist eine kleine Swift Erweiterung, um das aktuelle segmentedControl durch ein Array mit neuen Werten zu ersetzen

Schnell 3

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

Schnell 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

Hier ist eine Swift Erweiterung zum Ersetzen der Segmente durch eine Folge von Zeichenfolgen. Sie ähnelt eine andere Antwort hier angegeben, mit der Ausnahme, dass sie mit jeder Sequenz verwendet werden kann, was Sie können auch in Scheiben, Sets etc. übergeben.

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

Der Vollständigkeit halber (und weil ich hier gelandet bin, um herauszufinden, wie man dasselbe in xib erreicht), hier ist, wie man es in xib macht:

enter image description here

2
simon_smiley

arbeit für mich, UIsegmentedControll enthält zwei Segmente, ich möchte ein in Index 2 hinzufügen, verwenden Sie diesen Code in Swift 2.2 verwenden:

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