Я помню вас из вашего предыдущего вопроса .Небольшое изменение в моем предыдущем ответе поможет вам.В своем предыдущем вопросе вы указали CustomWriterPageCell
в качестве делегата UITextView
.Вместо этого, на этот раз, установите свой контроллер в качестве делегата.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "WriterPageCellID", for: indexPath) as! CustomWriterPageCell
cell.backgroundColor = indexPath.item % 2 == 1 ? .green : .yellow
cell.textViewOne.delegate = self
return cell
}
Теперь, следуйте протоколу:
extension ViewController : UITextViewDelegate {
func textViewDidEndEditing(_ textView: UITextView) {
let text = textView.text
}
}
До сих пор выуспешно передал текст из TextView в ячейке на ваш контроллер.Теперь проблема в том, что вы не знаете, к какому из этих индексов относится этот индекс.
Я не говорю, что это лучшее решение, но в вашем случае оно работает безопасно: вы можете установить тег для каждогоTextView, который действует как id:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "WriterPageCellID", for: indexPath) as! CustomWriterPageCell
cell.backgroundColor = indexPath.item % 2 == 1 ? .green : .yellow
cell.textViewOne.delegate = self
cell.textViewOne.tag = indexPath.row
return cell
}
Затем:
extension ViewController : UITextViewDelegate {
func textViewDidEndEditing(_ textView: UITextView) {
let text = textView.text //This the text
let row = textView.tag //This the indexPath.row
self.texts[row] = text //Save texts in an array. This array is fixed-size and has number of elements equal to your number of collection view's Items.
}
Вы можете объявить это так в вашем контроллере: var texts = Array(repeating: "", count: 10)
, где 10 - этоколичество элементов в представлении коллекции.
Все настроено, перейдем к кнопке печати:
@objc func printButtonTapped() {
for text in self.texts {
print(text)
}
}