повторяющиеся галочки при прокрутке таблицы - PullRequest
0 голосов
/ 15 мая 2018

У меня есть tableView, который содержит пользовательскую метку и кнопку (для установки галочки на изображениях).Я могу получить все тексты на этикетке правильно из массива. Но кнопка (отмеченные / не отмеченные изображения) при выборе показывает галочку, но она исчезает при прокрутке и показывает в другой ячейке.Ячейки повторно используются, но я не могу получить индивидуальный выбор и надлежащий результат.Дублирование происходит при прокрутке tableView.А также массив не добавляет правильные результаты seletecd.

Ниже приведен код.

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

    let cell = tvSelectGroup.dequeueReusableCell(withIdentifier: "cellnewgroup")

    let device = userDeviceArray[(indexPath as NSIndexPath).row]
    cell?.layer.cornerRadius = 10
     cell.slider.tag = indexPath.row
     if arraySensitivity.count==0
     {
     }else
     {
        cell.slider.value = Float(arraySensitivity[indexPath.row])
      }
    if let lbl = cell?.contentView.viewWithTag(1) as? UILabel
    {
        lbl.text = device
        lbl.textColor = UIColor.white
    }

    if let btnChk = cell?.contentView.viewWithTag(2) as? UIButton
    {
        print("button...")
        btnChk.addTarget(self, action: #selector(checkboxClicked(_ :)), for: .touchUpInside)
        if btnChk.currentImage==#imageLiteral(resourceName: "Checkmark")
        {
            addDeviceInArray(cell: cell!)
        }
    }
    print("arr\(arr)")
    return cell!
}

@objc func checkboxClicked(_ sender: UIButton)
{
    print("checked..")
    sender.isSelected = !sender.isSelected
}

@objc func addDeviceInArray(cell:UITableViewCell)
{
    let lbl = cell.contentView.viewWithTag(1) as? UILabel
    if !arr.contains((lbl?.text)!)
    {
        arr.append((lbl?.text)!)
        print("array in label\(arr)")
    }
}

Ответы [ 2 ]

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

При нажатии кнопки-флажка, нажмите кнопку управления флагом в userDeviceArray.Изначально установите 0 для всех объектов массива и при нажатии кнопки, если значение строки, по которому щелкнули, уже проверено, установите его равным 0, в противном случае установите его равным 1 и перезагрузите конкретную ячейку таблицы.А в ячейке таблицы добавьте проверку со значением флага объекта массива.

Надеюсь, это поможет.

0 голосов
/ 15 мая 2018
  1. Создать массив состояний - false / true. На основании этого меняются состояния ячеек или любых элементов контента.
  2. Создать собственную ячейку
  3. Добавить обработчик внутри ячейки при нажатии кнопки

Например:

var states: [Bool] = [true, true, false]
var deviceName[String] = ["PC", "Mac", "iPhone"]

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

let cell = tableView.dequeueReusableCell(withIdentifier: "cellnewgroup") as? MyCell

let device = deviceName[indexPath.row]
cell?.layer.cornerRadius = 10

if state[indexPath.row] {
   cell.button.setImage("uncheckmark")

} else {
  cell.button.setImage("checkmark")
}


cell.onClick = {

  state[indexPath.row] != state[indexPath.row]

}

if states[indexPath.row] {
    lbl.text = device
    lbl.textColor = UIColor.white
} else  { // remove this
    // print("button...")

// add button to cell class and use it.
   //print("arr\(arr)")
   //return cell!
}


class MyCell: UITableViewCell {

    @IBOutlet var button: UIButton // connect to storyboard or create your own
    var onClick: () -> Void = {}



    // add this method to your cell, connect to storyboard or create your own target
    @IBAction func checkboxClicked(sender: UIButton) {

         onClick()

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...