У меня есть collectionView и я могу динамически добавлять ячейки в collectionView.Контроллер представления показывает только одну ячейку за раз, и я хочу, чтобы первый textView (который является частью ячейки) стал firstResponder (и всегда оставлял клавиатуру видимой), которая прекрасно работает при загрузке контроллера представления (такжекак в одном из случаев ниже).
Я создал метод для обнаружения текущей ячейки, который я вызываю каждый раз в любом из этих случаев: (1) пользователь прокручивает из одной ячейки в другую (метод помещенв scrollViewWillEndDragging), (2) пользователь нажимает кнопки UIB для перехода от одной ячейки к другой, (3) пользователь нажимает UIButton, чтобы создать и добавить новую ячейку в конец массива (который используется collectionView).
Это метод:
func setNewFirstResponder() {
let currentIndex = IndexPath(item: currentCardIndex, section: 0)
if let newCell = collectionView.cellForItem(at: currentIndex) as? AddCardCell {
newCell.questionTextView.becomeFirstResponder()
}
}
Теперь моя проблема в том, что это работает только в случае (1).Очевидно, у меня нет ячейки типа AddCardCell в случаях (2) и (3).Когда я печатаю currentCardIndex, я получаю одинаковый результат во всех случаях, что очень запутанно.
Любые подсказки, почему я не смог бы получить ячейку еще в случаях 2 и 3, но я в случае 1?
В качестве ссылки здесь приведены некоторые методы, которые яЯ использую:
//Update index and labels based on user swiping through card cells
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
//Update index based on targetContentOffset
let x = targetContentOffset.pointee.x
currentCardIndex = Int(x / view.frame.width)
setNewFirstResponder()
}
И другой метод, из которого он не работает (случай 3):
//Method to add a new cell at end of collectionView
@objc func handleAddCell() {
//Inserting a new index path into tableView
let newIndexPath = IndexPath(item: autoSaveCards.count - 1, section: 0)
collectionView.insertItems(at: [newIndexPath])
collectionView.scrollToItem(at: newIndexPath, at: .left, animated: true)
currentCardIndex = autoSaveCards.count - 1
setNewFirstResponder()
}