
Это удобный метод для таких вещей, как приложения-задачи, где вам потенциально может понадобиться более одной строки текста, а UILabel просто не подойдет. Однако вы теряете функцию заполнителя, но это уже другая история.
Итак, давайте начнем с создания нового базового проекта iOS - удалим ViewController и связанный с ним файл ViewController.swift. Перетащите TableViewController на его место. Не забудьте установить новый контроллер в качестве начального viewController.

Добавьте новый сенсорный файл какао - выберите "UITableViewController" в качестве подкласса, класс будет "TableViewController"
Выберите новый TableViewController и справа измените настраиваемый класс на "TableViewController".

Добавьте TextView прямо под (или, скорее, внутри) представления содержимого, например:

Выберите TextView и отключите прокрутку.

Измените цвет фона текстового представления на серый цвет. Для примера я использовал "Системный серый 5 цветов" и изменил размер шрифта на 30.

Затем выберите TableView и измените стиль на Inset Grouped. Это дает tableview угловой радиус и больше похоже на блокнот для нашего примера.
Выберите ячейку прямо под tableView и добавьте идентификатор повторного использования "textViewCell".


Мы добавим простые ограничения к текстовому представлению, в основном прикрепив его к сторонам его суперпросмотра, ContentView.


Мы создаем настраиваемую ячейку табличного представления, поэтому давайте создадим соответствующий файл CocoaTouch, на этот раз подкласс "UITableViewCell", и назовем класс "TableViewCell".

После создания вы можете добавить настраиваемый класс в ячейку.

Нам понадобится IBoutlet для TextView, есть несколько способов сделать это, но я всегда выбираю textViewCell, затем набираю alt и с помощью указателя щелкаю файл TextViewCell.swift, затем, удерживая ctrl, перетаскиваю на код.

Вернемся к TableViewController и настроим dataSource, очень просто скажем, что нам нужен один раздел из 5 строк.

Как на изображении, добавьте строку, которая определяет саму ячейку в функции делегата cellForRowAt. В файле уже должен быть пример, просто снимите комментарий и измените.
Если вы создадите и запустите сейчас, у вас должно получиться что-то похожее на изображение ниже. Вы можете вводить данные в ячейки, но ячейки не расширяются.

Чтобы все заработало, нам нужно настроить пару быстрых делегатов.
Во-первых, нам нужно зафиксировать любые изменения в textView, добавить это расширение в конец файла TextViewCell.swift.

Нам также нужно добавить строку, в которой говорится, что этот класс является делегатом для textView, поэтому все еще в TextViewCell.swift добавьте:

Теперь нам нужно создать нашу собственную функцию-делегат, которую мы назовем "TextViewCellDelegate", чтобы позволить нам выполнить какое-либо действие (в нашем случае обновить высоту tableViewCell) в TableViewController. Тем не менее в TextViewCell.swift добавьте определение протокола вверху.

Сделайте ссылку на нового делегата.

И, наконец, последнее, что нужно сделать в этом файле, - это вызывать функцию всякий раз, когда мы вводим что-либо в текстовое представление.

Весь файл должен выглядеть так (суть см. Ниже):

Все еще там? :)
Осталось сделать пару мелких дел.
Добавьте фактическую функцию "выполнения" в файл TableViewController.swift:

Если я процитирую документацию Apple, цель начального и конечного обновлений очень ясна - ... метод для анимации изменения высоты строк без перезагрузки ячейки. Эта группа методов должна заканчиваться вызовом endUpdates() .
Наконец, нам также нужно сообщить классу, что он является делегатом для TextViewCellDelegate, добавив "cell.delegate = self" в функцию CellForRow at.

Теперь, если мы построим и запустим, у вас должен быть рабочий пример.

Если вы добрались сюда, молодец и спасибо за чтение. Если вам понравилось это или вы нашли это полезным, ознакомьтесь с некоторыми из моих других сообщений среднего размера ниже.
Начинающий разработчик iOS - пользовательские кнопки UIButtons - тени, кнопки переключения, анимация с рамками, возможность дизайна...
Недавно я собрал проект как образец для себя, способ отметить различные методы построения... iosdevnewbie.medium.com
Начинающий разработчик iOS - покупка в приложении (IAP) стала проще с помощью SwiftyStoreKit.
SwiftyStoreKit действительно упрощает создание базовой покупки в приложении. В этом примере я покажу... levelup.gitconnected.com
Swift / Xcode: обмен данными между контроллерами представления.
Совместное использование данных между контроллерами представления - это часть работы разработчика iOS, представьте себе приложение с... levelup.gitconnected.com