有没有一种方法可以通过编程来更改段数?
是的,你可以使用
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];
}
}
希望这能帮到你。
[segmentController removeAllSegments]
。 - Zorayr这里是一个小的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)
}
}
}
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中完成此操作:
func setSegmentedControl() {
// [1] remove all segments
segmentedControl.removeAllSegments()
// [2] insert your segments by your model
["title1", "title2", "title3"].enumerated().forEach { index, title in
segmentedControl.insertSegment(withTitle: title, at: index, animated: false)
}
// [3] optional - select default segment
segmentedControl.selectedSegmentIndex = 0
}
对我有用,UIsegmentedControl 包含两个段,我想在索引 2 中添加一个,使用此代码在 Swift 2.2 中使用:
SEG_TipoFiltro.insertSegmentWithTitle("Title", atIndex: 2, animated: false)
使用代码在Swift4中添加和删除段
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)
}
}