Uisegmentedcontrol изменить количество сегментов программно
У меня есть UISegmentedControl в представлении SegmentedAnswer с четырьмя сегментами. Есть ли способ программно изменить количество сегментов? Большое спасибо!
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 используйте:
SEG_TipoFiltro.insertSegmentWithTitle("Title", atIndex: 2, animated: false)