Поздравляем с Новым Годом!
   
Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 3(47)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3

Библиографическое описание:
Семенов В.С., Салос В.С., Пожидаев Ю.К. РЕАЛИЗАЦИЯ НОВОГО КОНТРОЛЛЕРА ДЛЯ БИБЛИОТЕКИ FLEXY // Студенческий: электрон. научн. журн. 2019. № 3(47). URL: https://sibac.info/journal/student/47/129903 (дата обращения: 29.12.2024).

РЕАЛИЗАЦИЯ НОВОГО КОНТРОЛЛЕРА ДЛЯ БИБЛИОТЕКИ 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

 

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

 

Список литературы:

  1. Blog.justDev. [Электронный ресурс]. – Режим доступа: https://blog.justdev.org/lessons/uitableview-mistake/ (дата обращения: 16.07.2018)

Оставить комментарий