Gibt es eine Möglichkeit, die Anzahl der Segmente programmgesteuert zu ändern?
Antworten:
Ja, du kannst verwenden
removeSegmentAtIndex:(NSUInteger) animated:(BOOL)
Und
insertSegmentWithTitle:(NSString *) atIndex:(NSUInteger) animated:(BOOL)
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.
[segmentController removeAllSegments]
gemäß dem Kommentar von @ MCR verwendet zu werden.
Und hier ist eine kleine Swift-Erweiterung, um das aktuelle segmentedControl durch eine Reihe neuer Werte zu ersetzen
extension UISegmentedControl {
func replaceSegments(segments: Array<String>) {
self.removeAllSegments()
for segment in segments {
self.insertSegmentWithTitle(segment, atIndex: self.numberOfSegments, animated: false)
}
}
}
extension UISegmentedControl {
func replaceSegments(segments: Array<String>) {
self.removeAllSegments()
for segment in segments {
self.insertSegment(withTitle: segment, at: self.numberOfSegments, animated: false)
}
}
}
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:
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)
}
}
}
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)
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)
}
}