Статья опубликована в рамках: Научного журнала «Студенческий» № 3(47)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3
РЕАЛИЗАЦИЯ НОВОГО КОНТРОЛЛЕРА ДЛЯ БИБЛИОТЕКИ FLEXY
Flexy – библиотека, предназначенная для удобного использования таблиц и управления данными, написанная на языке Swift. Обладает возможностью обработки разных ячеек.
На начальном этапе библиотека состояла из двух компонентов: ядра, в которым описаны классы, протоколы и методы и модуля UIKit, с классами и протоколами, оперирующими возможностями одноименного фреймворка Apple. На их основе спроектирован контроллер, в котором конфигурация ячеек таблицы не зависит от самой таблицы.
В будущем предполагается, что библиотека будет иметь функции, перечисленные ниже:
- обработка разных типов ячеек;
- возможность выставления общего делегата для типа ячейки;
- одновременная поддержка динамической и статической высоты ячеек;
- автоматический подсчет разницы между старым и новым массивом данных для анимированного изменения таблицы;
- реализация MirrorArray, которая будет запоминать все изменения в нем и на основе этого так же можно анимировать изменения в таблице;
- реализация контроллера, который упростит создание таблицы с вложенными в ячейки таблицами.
Для реализации задуманных функций нужно продумать архитектуру библиотеки так, чтобы она легко расширялась и была удобна в использовании. Для этого нужно составить UML-диаграмму текущих классов и решить, как будут реализованы конкретные функции.
Рисунок 1. UML-диаграмма библиотеки Flexy
Из данной диаграммы видно, что библиотека достаточно небольшая. После изучения компонентов и входящих в них классов и протоколов библиотеки становится ясно, что библиотека спроектирована должным образом, не трудна в освоении и легко расширяема.
Описание классов и протоколов
Протокол – аналог интерфейсов для других объектно-ориентированных языков программирования, реализующий возможность множественного наследования.
В данной диаграмме протокол ItemModel и его реализация отвечает за сущность, которая связывается с каждой ячейкой, определяя особые атрибуты для ее представления. Используется в виде массива для заполнения таблиц.
AbstractController – абстрактный контроллер, от которого в дальнейшем наследуются другие контролеры. Имеет ряд необходимых методов и свойств.
View – представление. Используется в качестве ячейки таблицы.
Под протокол ViewBinder подписываются определенные классы, которые благодаря реализации методов связывают модель с представлением.
ViewBinderWrapper обертка ViewBinder или его реализация.
Протокол CellProvider обеспечивает регистрацию ячеек и их повторное использование при построении таблицы.
Index – структура, предназначенная для обращения к элементам таблицы.
NSObject – суперкласс.
ViewBinderRegistrationError и ViewBinderError – коды для обрабатываемых исключений.
SimpleTableController – контроллер, предназначенный для построения обычных таблиц в один столбец. Наследуется от AbstractController.
UITableViewDelegate – протокол, относящийся к библиотеке UIKit, предназначенный для реализации функций делегата таблицы.
UITableViewDataSource – протокол, относящийся к библиотеке UIKit, предназначенный для реализации функций источника данных таблицы.
TableView+CellProvider – класс, реализующий протокол CellProvider, позволяющий регистрировать ячейки и повторно использовать их для таблиц с одним столбцом.
Контроллер для UITableView с вложенным UICollectionView
UIKit – библиотека от Apple, предназначенная для работы с пользовательским интерфейсом. Имеет множество классов-контроллеров, а также элементов пользовательского интерфейса классов-представлений, в том числе UITableView и UICollectionView.
UITableView – один из наиболее важных элементов пользовательского интерфейса для IOS-приложений. Сама таблица представляется одним столбцом с определенным количеством ячеек (статическая) или неограниченным количеством ячеек (динамическая) [1].
Рисунок 2. Пример UITableView
Ячейки таблицы представляются классом UITableViewCell и могут конфигурироваться: иметь разную высоту, отличные друг от друга данные (модель) для представления, а также иметь разные секции для их представления. Сами ячейки используются несколько раз, то есть строятся по прототипу одной, имеющей определенный идентификатор.
UICollectionView – элемент интерфейса для IOS приложений. Представляет собой коллекцию элементов-представлений. Элементы и являются ячейками. Причём подстановка элементов происходит автоматически.
Ячейки UICollectionView более конфигурируемы, так как могут иметь собственную высоту, ширину, а также отступы друг от друга.
В уже существующем контроллере SimpleTableController данные из массива моделей связываются с представлением ячеек в таблице и отображаются в ячейках шириной во весь экран. Возникла необходимость добавить контроллер с ячейками, имеющими неопределенное количество элементов. Для этого следует реализовать ячейки с вложенным UICollectionView. Это необходимо для разделения входных моделей на категории.
Для ячеек с вложенным UICollectionView потребовалось написать новый контроллер CollectionCellController, который наследовался бы от AbstractController и реализовал необходимые методы, те же что и для SimpleTableController и позволял бы получать ячейку из UICollectionView.
Затем, создается другой контроллер TableCollectionController с UITableView, который позволит связать CollectionCellController с ячейками UITableView.
Таким образом, получается контроллер TableCollectionController в котором можно указать категории для секции, а также вставить неограниченное количество элементов в строку – ячейку.
Новый контроллер подойдет для создания интерфейса с разными категориями. Например, можно сделать магазин по продаже автомобилей.
Рисунок 3. Пример TableCollectionController
Прокрутка элементов по горизонтали позволяет сэкономить высоту ячеек для секций таблицы. Интерфейс приложения становится более лаконичным.
Список литературы:
- Blog.justDev. [Электронный ресурс]. – Режим доступа: https://blog.justdev.org/lessons/uitableview-mistake/ (дата обращения: 16.07.2018)
Оставить комментарий