UISegmentedControl изменить количество сегментов программно



У меня есть UISegmentedControl в представлении SegmentedAnswer, с четырьмя сегментами.
Есть ли способ изменить количество сегментов программно?
Большое спасибо!

710   6  

6 ответов:

Да, вы можете использовать

removeSegmentAtIndex:(NSUInteger) animated:(BOOL)

и

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

чтобы полностью заменить сегменты, вы можете использовать следующую функцию:

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

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

надеюсь, что это помогает.

и вот небольшое расширение Swift для замены текущего segmentedControl массивом новых значений

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

вот быстрое расширение для замены сегментов последовательностью строк. Это похоже на еще один ответ данный здесь, за исключением того, что он может использоваться с любой последовательностью, то есть вы также можете передавать срезы, наборы и т. д.

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

для полноты картины (и потому, что я оказался здесь, ища, как достичь того же самого в xib) вот как это сделать в xib:

enter image description here

работа для меня, UIsegmentedControll содержит два сегмента, я хочу добавить один в индекс 2, Используйте этот код в swift 2.2 use:

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

Comments

    Ничего не найдено.