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:
работа для меня, UIsegmentedControll содержит два сегмента, я хочу добавить один в индекс 2, Используйте этот код в swift 2.2 use:
SEG_TipoFiltro.insertSegmentWithTitle("Title", atIndex: 2, animated: false)

Comments