Как разрешить пользователю включать ТОЛЬКО один встроенный программный интерфейс uiSwitch и хранить данные коммутатора - PullRequest
0 голосов
/ 23 октября 2018

В моем car register tableview есть программно встроенный переключатель, который, когда пользователь включает его для автомобиля по своему выбору, логическое значение сохраняется и сохраняется в основных данных, а марка автомобиля будет отображаться в другом контроллере представления.

Вопрос: Как сделать так, чтобы пользователь мог включить только ОДИН переключатель, и как я могу сохранить эти данные (имя автомобиля), когда переключатель включен?

Код:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cellS = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell

    //here is programatically switch make to the table view

    switchView.setOn(false, animated: true)
    switchView.tag = indexPath.row // for detect which row switch Changed
//        switchView.addTarget(self, action: #selector(self.switchChanged(_:)), for: .valueChanged)
    cellS.accessoryView = switchView

    if indexPath.row != 0 {
        switchView.isEnabled = true
        UserDefaults.standard.set(switchView.isOn, forKey: "CarSwitch")

Это моя попытка кода:

    if switchView.isSelected {
            UserDefaults.standard.set(indexPath.row, forKey: "usethiscar")
        }

    }

    if tableView == table1 {
        let cell = table1.dequeueReusableCell(withIdentifier: "Cell")

        let row = indexPath.row
        cell?.textLabel?.text = table1Data[row]

        return cell!
    }

    return UITableViewCell()
} 

Вот как это выглядит

Это когда «Добавить автомобиль'нажат

Это не должно происходить, когда включены два переключателя

1 Ответ

0 голосов
/ 23 октября 2018

Я реализовал такую ​​задачу раньше.Идея состоит в том, чтобы сохранить ссылку на текущий выбранный индекс и использовать его при повороте выбранного переключателя off, когда пользователь переключает автомобиль.

Код ниже не проверен.Пожалуйста, используйте их в качестве ссылки .

// the table data model
var carNames: [String] = []

// this will hold the current selected tag index
var selectedTagIndex: Int = -1

// configuring the cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
{
    // copied from your code.
    // NOTE: You might wan't to create a custom cell for this
    // to access the switch view directly when turning it off
    // during the car selection
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell

    // switch on if the index path row is equal to the current
    // selected index, switch off otherwise
    cell.switchView.isOn = (indexPath.row == self.selectedTagIndex)

    // set the tag index
    cell.switchView.tag = indexPath.row
 }

 // Switch change-in-value handler
 func onCarSwitchValueChanged(sender: UISwitch)
 {
    guard sender.isOn else 
    {
       // if switch is off

       // remove selected tag index
       self.selectedTagIndex = -1

       // don't execute the code below
       return 
     }

     // the tag tag index of the switch
     let switchIndexTag =  sender.tag

     // check if there is a previously selected switch 
     guard self.selectedTagIndex != -1  else
     {
       // if none, just save the selected tag index
       self.selectedTagIndex = switchIndexTag

       // don't execute the code below
       return 
     }

     // OPTION 1: Turn off the selected switch manually.
     // Create a custom cell to be able to access the 
     // the switch view directly

     // create index path using the tag index
     let indexPath = IndexPath(row: switchIndexTag, section: 0)
     let cell = tableView.cellForRow(at: indexPath!) as! TheCustomCellClass
     cell.switchView.isOn = false 

     // save the current selected switch tag index
     self.selectedTagIndex = switchView.tag

     // OPTION 2: Reload the entire table 
     // self.tableView.reloadData()  
 }
...