setEnabled для UISegmentedControl без стилизации по-другому - PullRequest
0 голосов
/ 05 ноября 2018

Я использую Swift 4, и я хотел бы отключить UISegmentedControl во время демонстрации, но я не хочу, чтобы он стилизовал его по-другому, пока это происходит. Например, мой UISegmentedControl называется saveAsControl, и я отключаю сегмент:

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

Но когда это происходит, я не хочу, чтобы это изменило внешний вид.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы можете использовать расширение. Кроме того, вы можете решить эту проблему, используя простую однострочную строку, которая устанавливает цвет текста для ваших отключенных сегментов по умолчанию tintColor из segmentedControl:

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.

Это скриншот моего кода, когда я запускаю его на детской площадке: enter image description here

0 голосов
/ 05 ноября 2018
extension UISegmentedControl {
    func setUserInteractionEnabled(_ enabled: Bool, forSegmentAt segment: Int) {
        if subviews.indices.contains(segment) {
            subviews[segment].isUserInteractionEnabled = enabled
        }
    }
}

segmentedControl.setUserInteractionEnabled(false, forSegmentAt: 0)
...