Я не могу понять UIButton с тремя состояниями (запуск, остановка и сброс) - PullRequest
0 голосов
/ 09 марта 2020

Я учу себя, как писать код Swift, и я знаю, что это не красиво, но я ищу больше, чтобы сначала он заработал. Я знаю, что мне нужно, но я не могу понять это. У меня есть кнопка с одним действием, и когда вы нажимаете на нее, она мне нужна, чтобы изменить цвет, название и функцию. У меня есть цвет и изменение названия, но изменить функцию сложно. Кажется, мне нужно передать новую функцию в функцию «startTapped» внутри таймера, но я не могу найти хороший способ сделать это. Это может быть связано с жизненным циклом loadView ()

timerView.actionButton.addTarget(self, action: #selector(startTapped), for: .touchUpInside)

. Вот полный фрагмент кода:

        view = timerView
        timerView.installContraints()
        timerView.actionButton.addTarget(self, action: #selector(startTapped), for: .touchUpInside)
    }

    @objc func startTapped() {
        print("button pressed")
        activeTimer?.invalidate()

        let startDate = Date()
        activeTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true, block: { _ in
            let currentDate = Date()
            let duration = currentDate.timeIntervalSince(startDate)

            func formatDuration(DoubleDuration: (Double) -> String) {
                // make number formatter function to format the TimeInterval Double into a String??
            }

            self.timerView.timerLabel.text = "\(duration)"
        })
        timerView.actionButton.setTitle("STOP", for: .normal)
        timerView.actionButton.setTitleColor(.white, for: .normal)
        timerView.actionButton.backgroundColor = .red
    }

    func stopTapped() {
        print("stop tapped")
        activeTimer?.invalidate()
    }

    func resetTapped() {
        print("something")
    } ```



1 Ответ

1 голос
/ 09 марта 2020

Если вы хотите выполнять действия всегда в порядке запуска / остановки / сброса, добавьте индексную переменную

var index = 0

Затем добавьте новую функцию, которая вызывает другие функции в зависимости от index, а затем увеличивает индекс

@objc func buttonTapped(_ sender : UIButton) {
     if index == 0 {
        startTapped()
     } else if index == 1 {
        stopTapped()
     } else {
        resetTapped()
     }
     index = (index + 1) % 3
}

и использовать эту функцию в качестве действия кнопки

timerView.actionButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...