我需要一个带有2行的UISegmentedControl,我无法实现它。 我不想使用2个不同的UISegmentedControl。有没有解决这个问题的方法?如何用两行实现UISegmentedControl?
答案 0 :(得分:0)
' UISegmentedControl'不支持多行。如果您需要它,您必须自己构建它或找到提供它的第三方库。
正如Helium在他/她的评论中所建议的那样,您可以创建一个自定义控件,在内部管理两个或多个分段控件并处理它们之间的状态更改。
说实话,分段控制并不复杂。创建自定义2D分段控件并不困难。如果这是一个关键需求,那么你可能想要走那条路。
答案 1 :(得分:-1)
基本上,您需要在每个分段控件上都有一个IBAction和IBOutlet。
对IBAction进行编码,以便单击其中一个分段控件将IBOutlet的其他分段控件(未选中)的selectedSegmentIndex设置为UISegmentedControlNoSegment。这会产生分段控件链接的错觉。
然后获取选择了哪个分段控制值的正确信息只是将分段控件的所有索引收集到一个常量中。
@IBOutlet weak var segment1: UISegmentedControl!
@IBOutlet weak var segment2: UISegmentedControl!
@IBOutlet weak var segment3: UISegmentedControl!
@IBAction func FirstSecond(_ sender: UISegmentedControl) {
segment2.selectedSegmentIndex = UISegmentedControlNoSegment
segment3.selectedSegmentIndex = UISegmentedControlNoSegment
}
@IBAction func ThirdFourth(_ sender: UISegmentedControl) {
segment1.selectedSegmentIndex = UISegmentedControlNoSegment
segment3.selectedSegmentIndex = UISegmentedControlNoSegment
}
@IBAction func FifthSixth(_ sender: UISegmentedControl) {
segment1.selectedSegmentIndex = UISegmentedControlNoSegment
segment2.selectedSegmentIndex = UISegmentedControlNoSegment
}
let segmentvalue = ["First","Second","Third","Fourth","Fifth","Sixth"]
@IBAction func FirstSecond(_ sender: UISegmentedControl) {
segment2.selectedSegmentIndex = UISegmentedControlNoSegment
segment3.selectedSegmentIndex = UISegmentedControlNoSegment
let valueINeed = segmentvalue[segment1.selectedSegmentIndex]
}
@IBAction func ThirdFourth(_ sender: UISegmentedControl) {
segment1.selectedSegmentIndex = UISegmentedControlNoSegment
segment3.selectedSegmentIndex = UISegmentedControlNoSegment
let valueINeed = segmentvalue[segment2.selectedSegmentIndex + 2]
}
@IBAction func FifthSixth(_ sender: UISegmentedControl) {
segment1.selectedSegmentIndex = UISegmentedControlNoSegment
segment2.selectedSegmentIndex = UISegmentedControlNoSegment
let valueINeed = segmentvalue[segment3.selectedSegmentIndex + 4]
}