Это удобный метод для таких вещей, как приложения-задачи, где вам потенциально может понадобиться более одной строки текста, а 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.

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

Если вы добрались сюда, молодец и спасибо за чтение. Если вам понравилось это или вы нашли это полезным, ознакомьтесь с некоторыми из моих других сообщений среднего размера ниже.