UISegmentedControl ändert die Anzahl der Segmente programmgesteuert


Antworten:


136

Ja, du kannst verwenden

removeSegmentAtIndex:(NSUInteger) animated:(BOOL)

Und

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

Ich löste mit: [self.SegmentAnswer insertSegmentWithTitle: @ "5" atIndex: 4 animiert: YES]; [self.SegmentAnswer insertSegmentWithTitle: @ "6" atIndex: 5
Beppino66

46

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.


2
Dies war perfekt, um in eine UISegmentedControl-Kategorie eingeordnet zu werden. Vielen Dank!
DonnaLea

1
Sie können [segmentController removeAllSegments] anstelle der while-Schleife verwenden. Siehe die Dokumentation unter developer.apple.com/library/ios/documentation/UIKit/Reference/…
MCR

Zur Überprüfung ist es sowohl für 7.X als auch für 8.X verfügbar.
Zorayr

Bearbeitet, um [segmentController removeAllSegments] gemäß dem Kommentar von @ MCR verwendet zu werden.
Zorayr

26

Und hier ist eine kleine Swift-Erweiterung, um das aktuelle segmentedControl durch eine Reihe neuer Werte zu ersetzen

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

3

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

Geben Sie hier die Bildbeschreibung ein


3

Hier ist eine Swift-Erweiterung zum Ersetzen der Segmente durch eine Folge von Zeichenfolgen. Es ähnelt einer anderen hier gegebenen Antwort , außer dass es mit jeder Sequenz verwendet werden kann, was bedeutet, dass Sie auch Slices, Sets usw. übergeben können.

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

1
Können Sie einen Link zu der anderen Antwort hinzufügen, auf die Sie sich beziehen? Sie können einen Permalink zu einer Antwort erhalten, indem Sie auf den Link "Teilen" darunter klicken.
Al Sweigart

0

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

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

0

Hinzufügen und Löschen von Segmenten in swift4 mithilfe von 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)
  }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.