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