Чередуйте UIView фон между двумя цветами, нажав кнопку - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь настроить одну кнопку, которая при каждом нажатии будет чередовать два цвета (черный и белый).Первоначально приложение загружается с черным фоном, при первом касании кнопки оно переключается на белый фон, при втором - обратно на черный фон и т. П.

Я думаю, это было бы просто, еслиоператор else, однако я не знаю, как создать переменную, которая является текущим цветом фона пользовательского интерфейса.

@IBAction func background_toggle(_ sender: UIButton) {
    self.view.backgroundColor = UIColor.white
}

Кнопка меняет ее на белый, но не существует никакой реализации, чтобы вернуться к черномукогда есть второе нажатие.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Не пытайтесь использовать содержимое вида для определения следующего состояния путем сравнения цветов.

Отделите вашу модель от вашего вида исохранить отдельное свойство, которое имеет текущее состояние.Вы можете использовать простой логический флаг isBlack или создать перечисление:

enum BackgroundState {
    case black, white
}

, которое имеет небольшое преимущество в том, что его легче расширить, если вам когда-либо понадобится другой цвет / состояние.(CaseIterable может быть полезно и тогда.)

0 голосов
/ 19 февраля 2019

Вы можете использовать backgroundColor в качестве условия, чтобы проверить, какое из них вы должны выбрать следующее.


Подход с использованием атрибута backgroundColor

@IBAction func background_toggle(_ sender: UIButton) {
    if self.view.backgroundColor == .white {
        self.view.backgroundColor = .black
    } else {
        self.view.backgroundColor = .white
    }
}

Другими словами: если backgroundColor равно .white, установите его .black

В противном случае установите его .white


Советы:

Поскольку backgroundColor является UIColor, Swift выводит тип, такВы можете просто набрать .white или .black при его назначении, без необходимости указывать UIColor.white или UIColor.black.

Вы можете иметь переменную состояния, такую ​​как Bool, UIColor или Enum.Затем вы сравниваете с этим вместо backgroundColor вида.


Подход с использованием переменной Bool

var isWhite = true

@objc func handleOpenTermsAndConditions() {

    if self.isWhite {
        self.isWhite = false
        self.view.backgroundColor = .black
    } else {
        self.isWhite = true
        self.view.backgroundColor = .white
    }
}

Подход с использованием переменной UIColor

var currentBackgroundColor : UIColor = .white

@objc func handleOpenTermsAndConditions() {

    if currentBackgroundColor == .white {
        self.currentBackgroundColor = .black
        self.view.backgroundColor = .black
    } else {
        self.currentBackgroundColor = .white
        self.view.backgroundColor = .white
    }
}

Подход с использованием состояния Enum

Если вы хотите ограничить цвета, вы можете создать Enumс доступными цветами.Я думаю, что излишне использовать его с такой простой логикой, как .white |.black.

Шаг 1: Создайте enum.

enum AvailableColor {
    case white
    case black

    func currentUIColor() -> UIColor {
        switch self {
        case .white:
            return UIColor.white
        case .black:
            return UIColor.black
        }
    }
}

Шаг 2: Создайте экземпляр переменной состояния и используйте логику enum

var currentColorState : AvailableColor = .white

@objc func handleOpenTermsAndConditions() {

    if currentColorState == .white {
        currentColorState = .black
    } else {
        currentColorState = .white
    }

    self.view.backgroundColor = currentColorState.currentUIColor()
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...