UISegmentedControl 以编程方式更改段数
Posted
技术标签:
【中文标题】UISegmentedControl 以编程方式更改段数【英文标题】:UISegmentedControl change number of segments programmatically 【发布时间】:2012-07-23 05:49:59 【问题描述】:有没有办法以编程方式更改段数?
【问题讨论】:
【参考方案1】:是的,你可以使用
removeSegmentAtIndex:(NSUInteger) animated:(BOOL)
和
insertSegmentWithTitle:(NSString *) atIndex:(NSUInteger) animated:(BOOL)
【讨论】:
我解决了:[self.SegmentAnswer insertSegmentWithTitle:@"5" atIndex:4 animated:YES]; [self.SegmentAnswer insertSegmentWithTitle:@"6" atIndex:5【参考方案2】:要完全替换段,可以使用以下函数:
- (void)setSegments:(NSArray *)segments
[segmentController removeAllSegments];
for (NSString *segment in segments)
[segmentController insertSegmentWithTitle:segment atIndex:segmentController.numberOfSegments animated:NO];
希望这会有所帮助。
【讨论】:
这非常适合放入 UISegmentedControl 类别。谢谢! 您可以使用 [segmentController removeAllSegments] 代替 while 循环。请参阅developer.apple.com/library/ios/documentation/UIKit/Reference/… 上的文档 仔细检查一下,它适用于 7.X 和 8.X 是吗? 根据@MCR 的评论编辑为使用[segmentController removeAllSegments]
。【参考方案3】:
为了完整起见(因为我最终在这里寻找如何在 xib 中实现相同的目标)这里是如何在 xib 中做到这一点:
【讨论】:
【参考方案4】:这里有一个小的 Swift 扩展,用新值数组替换当前的 segmentedControl
斯威夫特 3
extension UISegmentedControl
func replaceSegments(segments: Array<String>)
self.removeAllSegments()
for segment in segments
self.insertSegmentWithTitle(segment, atIndex: self.numberOfSegments, animated: false)
斯威夫特 4
extension UISegmentedControl
func replaceSegments(segments: Array<String>)
self.removeAllSegments()
for segment in segments
self.insertSegment(withTitle: segment, at: self.numberOfSegments, animated: false)
【讨论】:
【参考方案5】:为我工作,UIsegmentedControll 包含两个段,我想在索引 2 中添加一个,在 swift 2.2 中使用此代码:
SEG_TipoFiltro.insertSegmentWithTitle("Title", atIndex: 2, animated: false)
【讨论】:
【参考方案6】:这是一个用字符串序列替换段的 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)
【讨论】:
您可以添加指向您所指的其他答案的链接吗?您可以通过点击其下方的“分享”链接获得答案的永久链接。【参考方案7】:使用代码在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)
【讨论】:
以上是关于UISegmentedControl 以编程方式更改段数的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将 UISegmentedControl 添加到容器视图
如何在swift上以编程方式更改uisegmentedcontrol的字体大小和字体名称?
以编程方式在 UINavigationBar 下方的 UIToolbar 中添加 UISegmentedControl