ВЫКЛЮЧИТЕ все UIS-переключатели, кроме текущего в tableViewCell
Мне нужно, чтобы пользователь мог выбрать только одно значение из ячеек.
@objc func switchChangedPeriod(_ sender : UISwitch!){
if sender.isOn{
periodUserString = period[sender.tag].periodUser
periodSystemString = period[sender.tag].periodSystem
//sender.setOn(false, animated: true) how to set OFF all switches except current
}else{
periodUserString = ""
periodSystemString = ""
}
}
Или, может быть, мне нужно отключить только предыдущий UISwitch?
1 ответ
Сначала создать delegate
для тебя UITableViewCell
подкласс и объявить функцию для переключателя, когда он меняет свое значение.
protocol CellDelegate {
func switchChangedValue(_ value: Bool, period: Period)
}
сейчас создай delegate
а также period
переменные внутри вашего подкласса, а также создать IBAction
для вашего переключателя, когда он меняет свое значение
class YourCell: UITableViewCell {
var delegate: CellDelegate?
var period: Period?
...
@IBAction func switchChanged(_ sender: UISwitch) {
delegate?.switchChangedValue(sender.isOn, period: period!)
}
}
Далее давайте создадим глобальную переменную для выбранного Period
в вашем контроллере
var selectedPeriod: Period?
Теперь реализуйте свой делегат в ViewController
и установить periodUserString
а также periodSystemString
в правильный формат, а также, если значение true
задавать selectedPeriod
как period
, если переключатель выключен, установите его в nil
, В конце перезагрузите данные вашего TableView
class ViewController: UIViewController, CellDelegate {
...
func switchChangedValue(_ value: Bool, period: Period) {
periodUserString = value ? period.periodUser : ""
periodSystemString = value ? period.periodSystem : ""
selectedPeriod = value ? period : nil
tableView.reloadData()
}
}
... здесь вы должны рассмотреть, если вам нужно установить periodUserString
а также periodSystemString
когда у тебя есть selectedPeriod
переменная
сейчас установлено UISwitch
говорится в cellForRowAt
зависит от того, если selectedPeriod
равен определенному period
в массиве с индексом, равным indexPath.row
(обратите внимание, что теперь ваш Period
класс / структура должна быть кодируемой). А также не забудьте установить ячейки delegate
а также period
,
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
... // cell as! YourCell
cell.delegate = self
let period = period[indexPath.row]
cell.period = period
cell.switch.setOn(period == selectedPeriod, animated: false)
...
}