繁体   English   中英

Swift isEditing 模式下的 Tableview 不会取消选择单元格

[英]Swift Tableview in isEditing mode doesn't deselect cell

我尝试在 isEditing 模式下使用标准选择。 当我第一次按下时它被选中,但是当我第二次按下时它在视觉上保持选中状态。 如果我将 isEditing 更改为 false 并且下次将其设置为 true 我不能 select 之前选择但它们没有标记的行。

如何解决? isEditing 通过按钮更改。 在此处输入图像描述''' class PermanentInternalViewController:UIViewController,UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,UIGestureRecognizerDelegate {

var index = 0
var test = ["dghffhfh",
            "sadasdsa",
            "sgfhghgfh"

]
var selectedArray: [IndexPath] = []
@IBOutlet weak var tableViewInternal: UITableView!
@IBOutlet weak var createButton: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()
    let tap = UITapGestureRecognizer(target: self, action: #selector(tableTapped))
    self.tableViewInternal.addGestureRecognizer(tap)


    self.tableViewInternal.delegate = self
    self.tableViewInternal.dataSource = self
    self.tableViewInternal.tableFooterView = UIView()
    self.tableViewInternal.allowsMultipleSelectionDuringEditing = true
    createButton.layer.cornerRadius = 10
    if tableViewInternal.isEditing {
        createButton.titleLabel!.text = "Add to your Temporary List"
    } else {
        createButton.titleLabel!.text = "Create Temporary List"
    }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    test.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "permanentInsideCell1", for: indexPath) as! customCell

    cell.tf.delegate = self
    //        cell.selectionStyle = .none
    cell.tf.text = test[indexPath.row]
    cell.tf.isUserInteractionEnabled = false






    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath) as! customCell
    cell.tf.isUserInteractionEnabled = true
    cell.selectionStyle = .none
    cell.tf.becomeFirstResponder()
    index = indexPath.row

    if tableViewInternal.isEditing{
        cell.tf.isUserInteractionEnabled = false
    }
    print (cell.isSelected)

    if  selectedArray.contains(indexPath) {
        // it was already selected
        selectedArray.remove(at: selectedArray.firstIndex(of: indexPath)!)


        print(selectedArray)
    } else {
        // wasn't yet selected, so let's remember it
        selectedArray.append(indexPath)

        print(selectedArray)
    }
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    print("Deselect")

}

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == .delete {
        test.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .automatic)
    }
}


func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}

func textFieldDidEndEditing(_ textField: UITextField) {
    test[index] = textField.text!
    tableViewInternal.reloadData()
    //        textField.resignFirstResponder()
}

@IBAction func createTempList(_ sender: UIButton) {
    tableViewInternal.isEditing = true
    createButton.setTitle("Add to your Temporary List", for: .normal)



}
func addAction() {
    // create a new row by appending new empty strings
    test.append("")

    tableViewInternal.reloadData()
}

@objc func tableTapped(tap:UITapGestureRecognizer) {
    tap.cancelsTouchesInView = false
    let location = tap.location(in: self.tableViewInternal)
    let path = self.tableViewInternal.indexPathForRow(at: location)
    if let _ = path {

        //            self.tableView(self.tableViewInternal, didSelectRowAt: indexPathForRow)
    } else {
        // handle tap on empty space below existing rows however you want
        if self.tableViewInternal.isEditing {
            self.tableViewInternal.isEditing = false
            self.createButton.setTitle("Create Temporary List", for: .normal)
        } else {
            addAction()
        }
    }
}

}

'''

解决了。 问题出在 cell.selectionStyle =.none 如果删除它并为 tableview 使用清晰的背景颜色,一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM