为什么 UISegmentedControl 从后往前工作?

Why the UISegmentedControl works from back to front?

我正在为 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 开始编号(您可以通过在 switch 语句上放置一个断点来验证这一点。).selectedSegment 将与您期望的一致。

令人困惑的地方是子视图。子视图数组是按照添加视图的顺序创建的,并且可能与段顺序无关。大多数时候你不必处理每个段的实际视图(大多数时候还有其他方法)。

所以回答你的问题 - 是的,这是正常的,但不是 - 这不是很理想。

分段控件支持多种自定义外观的选项。 (例如:色调、每段图像的设置方法等)

如果文档没有列出 public 用于操作分段控件子视图的接口,那么这些子视图是私有的,您不应尝试直接操作它们。你的代码很脆弱。不要那样做。

子视图的顺序(和性质)是私有实现细节,如有更改,恕不另行通知。 iOS 的未来版本可能会将分段控件实现为没有任何子视图的完全自定义对象,并且您发布的代码将完全中断。