4つのセグメントを持つSegmentedAnswerというビューにUISegmentedControlがあります。セグメントの数をプログラムで変更する方法はありますか?どうもありがとう!
はい、使用できます
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];
}
}
お役に立てれば。
そして、現在のsegmentedControlを新しい値の配列で置き換えるためのちょっとしたSwift拡張機能
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)
}
}
}
Swiftセグメントを文字列のシーケンスで置き換えるための拡張機能です。これは another answer と似ていますが、任意のシーケンスで使用できることを除いて、スライス、セットなども渡します。
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つのセグメントが含まれています。インデックス2に1つ追加しますSwift 2.2 use:
SEG_TipoFiltro.insertSegmentWithTitle("Title", atIndex: 2, animated: false)