Редактируемый текст, хранящийся в блоках UICollectionViewCell, не вызывал didSelectItemAt - PullRequest
0 голосов
/ 13 ноября 2018

My UICollectionViewCell имеет текстовое поле, когда я щелкаю по ячейке, оно позволяет мне редактировать текстовое поле, но функция UICollectionViewDelegate *1003* не вызывается.Как я могу преодолеть это?

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

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

Это функция collectionView

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

    increaseRowColumn()

    return cell
}

И я уже установил делегат и источник данных для контроллера.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018
  1. Учитывая, что ваше текстовое поле должно быть редактируемым.
  2. didSelect будет работать, если касаться ячейки за пределами текстового поля.
  3. Это не исключено, поэтому, если вы хотите распознать didSelect вместе с редактированием, вам нужно будет выполнить вычисления в textField didBeginEditing.Основным хаком будет установка значений пути индекса в виде тега или другого свойства вашего textfield в cellForItemAt (проверьте, например.).Вы также можете создать собственное текстовое поле.

Вот обновление вашего 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
}
0 голосов
/ 13 ноября 2018

Сначала

singleLetterTextField.isUserInteractionEnabled = false

Затем в didSelectItemAt

cell.singleLetterTextField.becomeFirstResponder()
...