Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

Решение

Используйте метод moveSection: toSection: табличного вида, чтобы переместить раздел на новое место. Кроме того, можно применять метод moveRowAtIndexPath: toIndexPath:, чтобы перемещать ячейку табличного вида на новое место с того места, которое она сейчас занимает.

Обсуждение

Процесс перемещения разделов и ячеек таблицы отличается от их замены. Рассмотрим пример, помогающий лучше понять эту разницу. Допустим, у нас есть табличный вид с тремя разделами, A, B и C. Если передвинуть раздел A к разделу C, то табличный вид заметит это и переместит раздел B туда, где до этого находился раздел A. Но если раздел B будет перемещен на место раздела C, то табличному виду вообще не придется перемещать раздел A, так как он находится «выше» двух перемещаемых разделов и не участвует в передвижениях B и C. В данном случае раздел B попадет на место раздела C, а раздел C — на место раздела B. Такая же логика применяется в табличных видах при перемещении ячеек.

Для демонстрации таких взаимодействий создадим табличный вид и загрузим в него три раздела, в каждом из которых есть три собственные ячейки. Начнем с файла реализации контроллера вида:

#import «ViewController.h»

static NSString *CellIdentifier = @"CellIdentifier";

@interface ViewController <UITableViewDelegate, UITableViewDataSource>

@property (nonatomic, strong) UITableView *myTableView;

@property (nonatomic, strong) NSMutableArray *arrayOfSections;

@end

Контроллер вида становится источником данных для табличного вида. В табличном виде есть разделы, а в каждом разделе — ячейки. Мы, в сущности, работаем с массивом массивов: массив первого порядка содержит разделы, а каждый раздел, в свою очередь, является массивом, содержащим ячейки. Отвечать за этот функционал будет элемент arrayOfSections, определяемый в заголовочном файле контроллера вида. Итак, заполним этот массив:

— (NSMutableArray *) newSectionWithIndex:(NSUInteger)paramIndex

withCellCount:(NSUInteger)paramCellCount{

NSMutableArray *result = [[NSMutableArray alloc] init];

NSUInteger counter = 0;

for (counter = 0;

counter < paramCellCount;

counter++){

[result addObject: [[NSString alloc] initWithFormat:@"Section %lu

Cell %lu",

(unsigned long)paramIndex,

(unsigned long)counter+1]];

}

return result;

}

— (NSMutableArray *) arrayOfSections{

if (_arrayOfSections == nil){

NSMutableArray *section1 = [self newSectionWithIndex:1

cellCount:3];

NSMutableArray *section2 = [self newSectionWithIndex:2

cellCount:3];

NSMutableArray *section3 = [self newSectionWithIndex:3

cellCount:3];

_arrayOfSections = [[NSMutableArray alloc] initWithArray:@[

section1,

section2,

section3

]

];

}

return _arrayOfSections;

}

Затем мы инстанцируем табличный вид и реализуем необходимые методы в протоколе UITableViewDataSource, чтобы заполнить табличный вид данными:

— (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView{

return self.arrayOfSections.count;

}

— (NSInteger) tableView:(UITableView *)tableView

numberOfRowsInSection:(NSInteger)section{

NSMutableArray *sectionArray = self.arrayOfSections[section];

return sectionArray.count;

}

— (UITableViewCell *) tableView:(UITableView *)tableView

cellForRowAtIndexPath:(NSIndexPath *)indexPath{

UITableViewCell *cell = nil;

cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier

forIndexPath: indexPath];

NSMutableArray *sectionArray = self.arrayOfSections[indexPath.section];

cell.textLabel.text = sectionArray[indexPath.row];

return cell;

}

— (void)viewDidLoad{

[super viewDidLoad];

self.myTableView =

[[UITableView alloc] initWithFrame: self.view.bounds

style: UITableViewStyleGrouped];

[self.myTableView registerClass: [UITableViewCell class]

forCellReuseIdentifier: CellIdentifier];

self.myTableView.autoresizingMask =

UIViewAutoresizingFlexibleWidth |

UIViewAutoresizingFlexibleHeight;

self.myTableView.delegate = self;

self.myTableView.dataSource = self;

[self.view addSubview: self.myTableView];

}

Теперь посмотрим, что получается. Сначала проверим, как разделы перемещаются на новое место. Напишем метод, который будет перемещать раздел 1 на место раздела 3:

Поделиться:
Популярные книги

Точка Бифуркации VII

Смит Дейлор
7. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации VII

Газлайтер. Том 3

Володин Григорий
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 3

Возвращение Безумного Бога

Тесленок Кирилл Геннадьевич
1. Возвращение Безумного Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возвращение Безумного Бога

Купеческая дочь замуж не желает

Шах Ольга
Фантастика:
фэнтези
6.89
рейтинг книги
Купеческая дочь замуж не желает

Источники силы

Amazerak
4. Иной в голове
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Источники силы

Старая школа рул

Ромов Дмитрий
1. Второгодка
Фантастика:
альтернативная история
6.00
рейтинг книги
Старая школа рул

Имперец. Том 5

Романов Михаил Яковлевич
4. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Имперец. Том 5

#Бояръ-Аниме. Газлайтер. Том 24

Володин Григорий Григорьевич
24. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 24

Петля, Кадетский корпус. Книга вторая

Алексеев Евгений Артемович
2. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
4.80
рейтинг книги
Петля, Кадетский корпус. Книга вторая

Князь Целитель 2

Ткачев Андрей Юрьевич
2. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Князь Целитель 2

Моров

Кощеев Владимир
1. Моров
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Моров

Товарищ "Чума" 3

lanpirot
3. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 3

Технарь

Муравьёв Константин Николаевич
1. Технарь
Фантастика:
космическая фантастика
попаданцы
7.13
рейтинг книги
Технарь

Практик

Листратов Валерий
5. Ушедший Род
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Практик