setEnabled 为 UISegmentedControl 没有不同的样式

setEnabled for UISegmentedControl without styling differently

我正在使用 Swift 4,我想在演示期间禁用 UISegmentedControl,但我不希望它在发生这种情况时采用不同的样式。例如,我的 UISegmentedControl 称为 saveAsControl,我禁用了一个段:

self.saveAsControl.setEnabled(false, forSegmentAt: 0)

但是当这种情况发生时,我不希望它改变外观。

extension UISegmentedControl {
    func setUserInteractionEnabled(_ enabled: Bool, forSegmentAt segment: Int) {
        if subviews.indices.contains(segment) {
            subviews[segment].isUserInteractionEnabled = enabled
        }
    }
}

segmentedControl.setUserInteractionEnabled(false, forSegmentAt: 0)

您可以使用扩展程序。或者,您可以使用简单的一行代码解决此问题,该代码将禁用段的文本颜色设置为 segmentedControl:

的默认 tintColor
let segmentItems = ["one", "two", "three"]
let mySegmentedControl = UISegmentedControl(items: segmentItems)

UISegmentedControl.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor:mySegmentedControl.tintColor], for: .disabled)

mySegmentedControl.setEnabled(false, forSegmentAt: 0)

确保您使用的是 UISegmentedControl 而不是 mySegmentedControl 因为 appearance()UISegmentedControl class.[=18= 的静态方法]

这是我在操场上 运行 时的代码截图: