Отображение галочки, когда пользователь выбрал строку таблицы в Swift ios - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу отображать галочку только в выбранной строке, как показано на скриншоте ниже.enter image description here

Здесь кнопки удаления и пометки являются динамически создаваемыми кнопками.

Вот мои методы просмотра таблиц ниже.

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if list.count == 0 {
        let alertView = UIAlertController(title: "Alert", message: "No layout found. Please add at least one plist file with correct format.", preferredStyle: .alert)
        alertView.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        UIApplication.shared.keyWindow?.rootViewController?.present(alertView, animated: true, completion: nil)
        self.removeFromSuperview()
    }
    return list.count
}
var btn = UIButton()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
    if let cell = cell {
        print("cell is available")
        // Remove previously created button from reused cell view
        if let button = cell.contentView.subviews.first(where: { (view: UIView) -> Bool in
            view.isKind(of: UIButton.self)
        }) {
            button.removeFromSuperview()
        }
    } else {
        cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
    }

    cell?.textLabel?.textAlignment = .left

    cell?.textLabel?.text = list[indexPath.row]

    if indexPath.row == (list.count - 1) {
        cell?.textLabel?.textAlignment = .center
    } else {
        btn = UIButton(type: UIButtonType.custom) as UIButton
        btn.frame = CGRect(x: 146, y: 0, width: 20, height: (cell?.frame.height)!)
        btn.addTarget(self, action: #selector(buttonPressed(sender: )), for: .touchUpInside)
        btn.tag = indexPath.row
        btn.setImage(UIImage(named: "delete.png"), for: .normal)
        cell?.contentView.addSubview(btn)
    }
    return cell!
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if list[indexPath.row] == "➕ Add Room"{
        print("ADd reoom selrctj")
        self.delegate?.enterRoomName()

    }else{
        self.delegate?.slecetedPicklist(fileName: list[indexPath.row])
        self.removeFromSuperview() //hiding drop down

        if indexPath.row == btn.tag{ //Here it's not correct i think
            btn.setImage(UIImage(named: "check_mark.png"), for: .normal)
        }else{
            btn.setImage(UIImage(named: "delete.png"), for: .normal)
        }
        self.table?.reloadData()
    }
}

Для этой реализации iЯ не в состоянии выполнить это требование, и результат показан ниже.Даже после выбора строки отображается удаление, и при нажатии на нее в раскрывающемся списке я удаляю его из суперпредставления.

enter image description here

Может кто-нибудь подсказать, пожалуйста, какреализовать это или где я делаю не так ??Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вместо удаления кнопки используйте ту же кнопку с разными значками для выбранного / нормального состояния.На той же кнопке будет отображаться требуемый значок. После выбора кнопки измените состояние выбора кнопки и перезагрузите таблицу или перезагрузите эту конкретную строку.Изменения будут отражены.

0 голосов
/ 27 февраля 2019

Вам необходимо сохранить (добавить / удалить элемент или индекс согласно элементу выбора и отмены выбора) индекс элемента или элемента в массиве и обновить (перезагрузить) выбранную строку в методе didSelectRowAt, используя следующий код.

tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: false)

А затем вам нужно проверить в методе cellForRowAt, доступен ли элемент в массиве, и соответственно отобразить галочку.

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