#RATreeView (iOS 5.0+)
##Цель
Класс RATreeView предназначен для реализации дерева в приложениях iOS. Он работает как обертка для UITableView, определяя свои собственные методы делегата и источника данных для более удобной работы с деревьями данных.
##Совместимость с ARC RATreeView реализован с использованием ARC.
##Установка
Чтобы использовать RATreeView в вашем приложении, просто перетяните файлы класса RATreeView в проект. Вы также можете установить RATreeView в своем проекте с помощью CocoaPods (pod "RATreeView"
в вашем Podfile).
Затем просто импортируйте заголовочный файл RATreeView.h
и используйте его!
##Введение Как RATreeView является оберткой для UITableView, большинство методов делегата и источника данных являются эквивалентами специфических методов протоколов делегата и источника данных UITableView. Они изменены таким образом, чтобы обеспечивать более удобное управление структурами данных в виде дерева. Также есть некоторые новые методы в протоколах для поддержки раскрытия и сворачивания строк дерева. Это должно работать на iOS Yöntemleri daha kolay veri ağacının yönetimi için değiştirilmiştir. Ayrıca protokollerde ağaç satırlarının açılıp kapanmasını desteklemek için bazı yeni yöntemler bulunur. Bu, iOS 5.0+ üzerinde çalışmalıdır.
##RATreeNodeInfo практически каждый метод протоколов RATreeViewDelegate'ın ve RATreeViewDataSource'ın имеет аргумент класса RATreeNodeInfo. RATreeNodeInfo логически связано с элементом. Цель этого параметра — предоставить программисту максимальное количество информации.
##RATreeNodeInfo
practically every method of the RATreeViewDelegate's and RATreeViewDataSource's protocol has the argument of the class RATreeNodeInfo. RATreeNodeInfo logically relates to an element. The purpose of this parameter is to provide the programmer with as much information as possible.Для достижения этой цели RATreeNodeInfo
имеет следующие свойства:
@property (nonatomic, getter=isExpanded, readonly) BOOL expanded;
Возвращает YES
, если строка элемента раскрыта.
@property (nonatomic, readonly) NSInteger treeDepthLevel;
Возвращает уровень элемента в дереве. Значение для детей корневого элемента равно 0.
@property (strong, nonatomic, readonly) RATreeNode *parent;
Возвращает родителя объекта.
@property (strong, nonatomic, readonly) NSArray *children;
Возвращает детей объекта.
@property (strong, nonatomic, readonly) id item;
Возвращает элемент, связанный с объектом.
RATreeView
имеет практически все свойства, которые можно найти в UITableView
или UIScrollView
.
@property (nonatomic) RATreeViewRowAnimation rowsExpandingAnimation;
Анимация используется для раскрытия строк. По умолчанию это RATreeViewRowAnimationTop
.
@property (nonatomic) RATreeViewRowAnimation rowsCollapsingAnimation;
Анимация, используемая при сворачивании строк. По умолчанию это RATreeViewRowAnimationBottom
.
RATreeView
(в сравнении с UITableView
):-(void)expandRowForItem:(id)item withRowAnimation:(RATreeViewRowAnimation)rowAnimation;
```Разворачивает строку, связанную с указанным элементом. Строка элемента должна быть видимой — её родительская строка должна быть развернута. Для невидимых элементов этот метод ничего не делает. Использует тип анимации, указанной в свойстве `rowsExpandingAnimation`. - (void)collapseRowForItem:(id)item withRowAnimation:(RATreeViewAnimation)rowAnimation;
Сворачивает строку, связанную с указанным элементом. Все дочерние элементы указанного элемента также будут свёрнуты.
- (void)collapseRowForItem:(id)item;
Сворачивает строку, связанную с указанным элементом. Все дочерние элементы указанного элемента также будут свёрнуты. Использует тип анимации, указанный в свойстве **rowsCollapsingAnimation**.
## Источник данных RATreeView
#####RATreeViewDataSource содержит следующие **обязательные** методы:
(NSInteger)treeView:(RATreeView*)treeView numberOfChildrenOfItem:(id)item;
Этот метод должен вернуть количество дочерних элементов, содержащихся в данном элементе. Если *item* равно nil, этот метод должен вернуть количество детей для верхнего уровня элемента.
(UITableViewCell *)treeView:(RATreeView *)treeView cellForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo
Этот метод запрашивает источник данных за ячейкой для вставки для конкретного *item*.
(id)treeView:(RATreeView *)treeView child:(NSInteger)index ofItem:(id)item;
Этот метод возвращает дочерний элемент по указанному индексу данного элемента. Если *item* равно nil, возвращается соответствующий дочерний элемент корневого объекта.
#####RATreeViewDataSource содержит следующие **необязательные** методы:
-(void)treeView:(RATreeView *)treeView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Этот метод запрашивает источник данных для выполнения вставки или удаления указанной строки.## Делегат RATreeView
Все методы делегата `RATreeViewDelegate` являются **необязательными**. **Делегат `RATreeViewDelegate` включает практически все методы, доступные в делегате `UITableViewDelegate`**. Для удобства управления именами и аргументами этих методов были слегка изменены.
Например:
```objc
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; // UITableViewDelegate
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath; // UITableViewDelegate
изменяются на:
- (CGFloat)treeView:(RATreeView *)treeView heightForRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo; // RATreeViewDelegate
- (void)treeView:(RATreeView *)treeView willBeginEditingRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo; // RATreeViewDelegate
- (BOOL)treeView:(RATreeView *)treeView shouldExpandRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Этот метод спрашивает делегат, следует ли раскрывать строку для предоставленного item из-за взаимодействия пользователя (выбор пользователя). Вызывается для сжатых строк с хотя бы одним потомком. По умолчанию строка будет раскрыта.
- (BOOL)treeView:(RATreeView *)treeView canEditRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Этот метод запрашивает источник данных для проверки того, что данная строка может быть отредактирована. Если этот метод не реализован, то все строки считаются редактируемыми.```objc
Этот метод информирует делегат о том, что конкретная строка будет раскрыта из-за взаимодействия пользователя.```objc
- (BOOL)treeView:(RATreeView *)treeView shouldCollapseRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Этот метод запрашивает у делегата, следует ли свернуть строку для данного item из-за взаимодействия пользователя. Вызывается для раскрытых строк с хотя бы одним потомком. По умолчанию строка будет свернута.
- (void)treeView:(RATreeView *)treeView willCollapseRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Этот метод уведомляет делегата о том, что конкретная строка будет свернута из-за взаимодействия пользователя.
- (BOOL)treeView:(RATreeView *)treeView shouldExpandItemAfterDataReload:(id)item treeDepthLevel:(NSInteger)treeDepthLevel;
```Этот метод запрашивает у делегата, следует ли раскрыть конкретную строку после перезагрузки данных. Этот метод вызывается для каждого элемента после каждой перезагрузки данных в RATreeView. В случае, если делегат возвращает *YES* для элемента, чей родитель (или родители) еще не раскрыт, все нераскрытые родители будут раскрыты.
#### Настройка строк для таблицы
- (CGFloat)treeView:(RATreeView *)treeView heightForRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Запрашивает у делегата высоту строки с указанным *item*.
- (NSInteger)treeView:(RATreeView *)treeView indentationLevelForRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Запрашивает у делегата уровень отступа для строки с указанным *item*.
- (void)treeView:(RATreeView *)treeView willDisplayCell:(UITableViewCell *)cell forItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что дерево собирается отрисовать ячейку для указанного *item*.#### Управление всплывающими панелями
```objc
- (void)treeView:(RATreeView *)treeView accessoryButtonTappedForRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что пользователь нажал кнопку всплывающей панели, связанной с данным элементом.
- (id)treeView:(RATreeView *)treeView willSelectRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что указанная строка готова к выбору. Верните другой элемент, чтобы выбрать другую строку. Элемент, возвращаемый этим методом, должен быть видимым (то есть его родительская строка должна быть раскрыта).
- (void)treeView:(RATreeView *)treeView didSelectRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что указанная строка была выбрана.
- (id)treeView:(RATreeView *)treeView willDeselectRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что указанная строка готова к снятию со статуса "выбран". Верните другой элемент, чтобы снять со статуса "выбран" другую строку. Элемент, возвращаемый этим методом, должен быть видимым (то есть его родительская строка должна быть раскрыта).
- (void)treeView:(RATreeView *)treeView didDeselectRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что указанная строка больше не выделена.
- (void)treeView:(RATreeView *)treeView willBeginEditingRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
```Уведомляет делегата о том, что дерево готово перейти в режим редактирования. Этот метод вызывается при горизонтальном свайпе пользователя по строке. - (void)treeView:(RATreeView *)treeView didEndEditingRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что дерево покинуло режим редактирования.
- (UITableViewCellEditingStyle)treeView:(RATreeView *)treeView editingStyleForRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Запрашивает у делегата стиль редактирования строки, связанной с конкретным элементом.
- (NSString *)treeView:(RATreeView *)treeView titleForDeleteConfirmationButtonForRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Изменяет стандартный заголовок кнопки подтверждения удаления. По умолчанию кнопка подтверждения удаления, которая появляется справа от ячейки, имеет заголовок "Удалить".
- (BOOL)treeView:(RATreeView *)treeView shouldIndentWhileEditingRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Запрашивает у делегата, следует ли отступать фон указанной строки во время редактирования дерева.
#### Отслеживание удаления представлений
- (void)treeView:(RATreeView *)treeView didEndDisplayingCell:(RATreeViewCell *)cell forItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что указанная ячейка была удалена из дерева.
#### Копирование и вставка содержимого строк
- (BOOL)treeView:(RATreeView *)treeView shouldShowMenuForRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Запрашивает у делегата, следует ли показывать меню редактирования для определенной строки.
- (BOOL)treeView:(RATreeView *)treeView canPerformAction:(SEL)action forRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo withSender:(id)sender;Запрашивает у делегата, следует ли пропустить команду "Копировать" или "Вставить" в меню редактирования для данной строки.
```objective-c
- (void)treeView:(RATreeView *)treeView performAction:(SEL)action forRowAtIndexPath:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo withSender:(id)sender;
Уведомляет делегата о выполнении операции копирования или вставки для содержимого указанной строки.
Запрашивает делегата, следует ли выделить указанную строку.
- (BOOL)treeView:(RATreeView *)treeView didHighlightRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что указанная строка была выделена.
- (BOOL)treeView:(RATreeView *)treeView didUnhighlightRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo;
Уведомляет делегата о том, что выделение было удалено со строки, связанной с указанным элементом.
##Типы Для лучшей энкапсуляции RATreeView объявляет некоторые свои перечисления, эквивалентные перечислениям, объявленным для UITableView и UITableViewCell. Эти перечисления используются как типы свойств и в вызовах методов RATreeView.
Эквивалент для UITableViewStyle
:
typedef enum {
RATreeViewStylePlain = 0,
RATreeViewStyleGrouped
} RATreeViewStyle;
Эквивалент для UITableViewCellSeparatorStyle
:
typedef enum RATreeViewCellSeparatorStyle {
RATreeViewCellSeparatorStyleNone = 0,
RATreeViewCellSeparatorStyleSingleLine,
RATreeViewCellSeparatorStyleSingleLineEtched
} RATreeViewCellSeparatorStyle;
Эквивалент для UITableViewScrollPosition
:
typedef enum RATreeViewScrollPosition {
RATreeViewScrollPositionNone = 0,
RATreeViewScrollPositionTop,
RATreeViewScrollPositionMiddle,
RATreeViewScrollPositionBottom
} RATreeViewScrollPosition;
Эквивалент для UITableViewRowAnimation
:
typedef enum RATreeViewRowAnimation {
RATreeViewRowAnimationNone = 0,
RATreeViewRowAnimationRight,
RATreeViewRowAnimationLeft,
RATreeViewRowAnimationTop,
RATreeViewRowAnimationBottom,
RATreeViewRowAnimationMiddle,
RATreeViewRowAnimationAutomatic
} RATreeViewRowAnimation;
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )