Проблема состояния изменения значения UISwitch - PullRequest
0 голосов
/ 04 апреля 2019

Я использовал UISwitch в своем приложении с целью valueChanged, как показано ниже. Этот переключатель в моем UITableView

settingsTableCell.androidSwitchSmall.addTarget(self, action: #selector(switchStateChanged(_:)), for: .valueChanged)


@objc func switchStateChanged(_ mjSwitch: MJMaterialSwitch) {
    if self.lastSwitchState == mjSwitch.isOn {
        return
    }
    self.lastSwitchState = mjSwitch.isOn
    print(mjSwitch.isOn, mjSwitch.tag, "Small")
    self.changeTrackStatus()
}

И я меняю значение Switch внутри целевого метода. Так что он снова вызывает switchStateChanged метод.

Но я хочу вызвать switchStateChanged этот метод, только если пользователь изменяет состояние переключателя.

Что может быть лучшим способом.

Как я могу отличить погоду пользователя, изменившего состояние переключателя, или состояние переключателя изменяется программно.

Ответы [ 3 ]

0 голосов
/ 04 апреля 2019

Вы должны отправить действие программно, Вы можете использовать следующее расширение

extension UISwitch {
    func set(on state: Bool, animated: Bool = true) {
        setOn(state, animated: animated)
        sendActions(for: .valueChanged)
    }
}
0 голосов
/ 04 апреля 2019

Почему вы не используете .touchUpInside. Это активирует селектор, только если пользователь взаимодействует с коммутатором.

settingsTableCell.androidSwitchSmall.addTarget(self, action: #selector(switchStateChanged(_:)), for: .touchUpInside)
0 голосов
/ 04 апреля 2019

Выполните шаги.

Шаг - 1

Создайте переменную внутри TabelView Cell

var Btn1 : (()->())? 

Шаг -2

Создайте Действие UIButton внутри TabelViewCell И вызовите выше Variable.

@IBAction func cellbtn(_ sender: UIButton) {
        Btn1?()
 }

Шаг - 3

Объявите переменную Bool и укажите Function в вашем View Controller

var IsSwitchOn = false

 func switchStateChanged(_ mjSwitch: MJMaterialSwitch) {
    if self.IsSwitchOn {
        return
    }
    self.IsSwitchOn = True
    print(mjSwitch.isOn, mjSwitch.tag, "Small")
    self.changeTrackStatus()
}

Шаг - 4

Позвоните в cellForRowAt indexPath.

let cell = tableView.dequeueReusableCell(withIdentifier: "CellID") as! YourCell

cell.Btn1 = {
              () in
              Self.switchStateChanged()
        }

Надеюсь, это работает.

...