iOS - Swift 4.- Обновленный заголовок метки UIButton не используется в функции - PullRequest
0 голосов
/ 27 мая 2018

У меня есть следующий код для заголовка метки кнопки (btnTD), который переключает заголовок своей метки между "L" и "R" ПОСЛЕ , который предполагается использовать ОБНОВЛЕНО Помечать заголовок в функции, вызываемой действием другой кнопки (в данном случае btnCalculate).

И переключение метки, и функция, вызываемая btnCalculate, работают нормально.

Однако, когда я переключаю кнопку, функция использует заголовок кнопки ДО она изменяется, а не ПОСЛЕ оно изменяется, даже если пользовательский интерфейс показывает, что заголовок корректно переключается.

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

    @IBAction func btnTD(_ sender: UIButton) {

    if btnTD.titleLabel!.text! == "R" {
        btnTD.setTitle("L", for: .normal)
    } else {
        btnTD.setTitle("R", for: .normal)
    }

    btnCalculate.sendActions(for: .touchUpInside)
}

Вот код для btnCalculate.sendActions(for: .touchUpInside), хотя я не думаю, что он уместен

    @IBAction func btnCalculate(_ sender: UIButton) {
    txtOutput.text = Hold(IBTrk: Int(txtIBT.text!)!, TD: (btnTD.titleLabel!.text!) , OBTime: Double(txtOBTime.text!)!, TAS: Double(Int(txtTAS.text!)!), WD: Int(txtWD.text!)!, WS: Double(txtWS.text!)!)
}

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Просто используйте btnTD.currentTitle Не tiltleLabel.Text

   @IBAction func btnCalculate(_ sender: UIButton) {
    txtOutput.text = Hold(IBTrk: Int(txtIBT.text!)!, TD: (btnTD.currentTitle) , OBTime: Double(txtOBTime.text!)!, TAS: Double(Int(txtTAS.text!)!), WD: Int(txtWD.text!)!, WS: Double(txtWS.text!)!)
}
0 голосов
/ 27 мая 2018

Установка заголовка кнопки делает это для состояния .normal.Однако в данный момент кнопка нажата, поэтому на мгновение (пока вызывается функция вычисления) ее заголовок остается старым значением.

Использование глобальной переменной в контроллере представления является одним из способов решения этой проблемы:

// Declare outside a method (in viewController)
var buttonState: String = "L" // Could also be a Bool variable

// Button action
@IBAction func btnTD(_ sender: UIButton) {
    if buttonState == "L" {
        buttonState = "R"
        btnTD.setTitle("R", for: .normal)
    } else {
        buttonState = "L"
        btnTD.setTitle("L", for: .normal)
    }
    // Then call the calculate method
    btnCalculate.sendActions(for: .touchUpInside)
}

Примечание: btnCalculate.sendActions() может быть лучше как отдельная функция, которая вызывается здесь, а также из кнопки btnCalculate, вместо использования sendActions.

...