在UICollectionViewCell中归档的可编辑文本阻止didSelectItemAt被调用

时间:2018-11-13 19:17:02

标签: ios swift uicollectionview uicollectionviewcell

我的UICollectionViewCell有一个文本字段,当我单击该单元格时,我可以编辑该文本字段,但是未调用didSelectItemAt的{​​{1}}函数。我该如何克服?

UICollectionViewDelegate

这是collectionView函数

class LetterCell: UICollectionViewCell {
    @IBOutlet weak var singleLetterTextField: UITextField!

    @IBAction func textDidChange(_ sender: Any) {
        if ((singleLetterTextField.text?.count)! > 1) {
            singleLetterTextField.text = String((singleLetterTextField.text?.last)!)
        }
    }
}

我已经将委托和数据源设置为控制器。

2 个答案:

答案 0 :(得分:0)

  1. 考虑到您需要文本字段是可编辑的。
  2. 如果在文本字段之外触摸单元格,则
  3. didSelect将起作用。
  4. 这并非不可能,因此,如果您希望在编辑时同时识别didSelect,则需要在textField didBeginEditing中进行计算。一个基本的技巧是将索引路径的值设置为textfieldcellForItemAt的标记或其他属性(例如,选中)。您也可以创建自定义文本字段。

这是您的cellForItemAt的更新:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    var cell = collectionView.dequeueReusableCell(withReuseIdentifier: "LetterCell", for: indexPath) as! LetterCell
    cell.singleLetterTextField.text = data[row][column]

    cell.singleLetterTextField.tag = indexPath.row//then you can use this tag to form indexPath and with that you can retrieve cell (if it's still visible)

    increaseRowColumn()

    return cell
}

答案 1 :(得分:-1)

第一

singleLetterTextField.isUserInteractionEnabled = false

然后在didSelectItemAt

cell.singleLetterTextField.becomeFirstResponder()