我正在为iOS开发一个应用程序(swift),我无法理解为什么UISegmentControl会以这种方式运行。 段0是最后一个,段3是第一个。 这是我的代码(现在工作正常):
@IBAction func SelectOptionInSegment(sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
sender.subviews[3].tintColor = segmentSelectedColor
break
case 1:
sender.subviews[2].tintColor = segmentSelectedColor
break
case 2:
sender.subviews[1].tintColor = segmentSelectedColor
break
case 3:
sender.subviews[0].tintColor = segmentSelectedColor
break
default:
}
有人可以解释这种行为吗?
答案 0 :(得分:2)
分段控件支持各种自定义外观的选项。 (例如,色调颜色,为每个片段设置图像的方法等)
如果文档没有列出用于操作分段控件的子视图的公共接口,那么这些子视图是私有的,您不应该尝试直接操作它们。你的代码很脆弱。不要那样做。
子视图的顺序(和性质)是私有实现细节,如有更改,恕不另行通知。 iOS的未来版本可能会将分段控件实现为完全自定义的对象而不包含任何子视图,并且您发布的代码将完全中断。
答案 1 :(得分:0)
这里有2件事情在玩。实际段从0开始编号(您可以通过在switch语句上放置一个断点来验证这一点。).selectedSegment将与您期望的一致。
令人困惑的是子视图。子视图数组按添加视图的顺序创建,并且可能与段顺序无关。大多数情况下,您不必处理每个细分的实际视图(还有其他方法 - 大部分时间)。
所以回答你的问题 - 是的,这是正常的,但不是 - 它不是很理想。