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

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

Жанры

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

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

Шрифт:

— (void) moveSection1ToSection3{

NSMutableArray *section1 = [self.arrayOfSections objectAtIndex:0];

[self.arrayOfSections removeObject: section1];

[self.arrayOfSections addObject: section1];

[self.myTableView moveSection:0

toSection:2];

}

Оставляю на ваш выбор окончательное решение о том, как инициировать этот метод,

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

Как только вы запустите приложение в обычном режиме, на экране появятся разделы с 1-го по 3-й (рис. 4.12).

Рис. 4.12. Табличный вид с тремя разделами, в каждом из которых находятся по три ячейки

После запуска метода moveSection1ToSection3 вы увидите, что раздел 1 переходит на место раздела 3, раздел 3 переходит на место, ранее занятое разделом 2, и, наконец, раздел 2 перемещается на то место, где раньше находился раздел 1 (рис. 4.13).

Рис. 4.13. Раздел 1 перешел на место раздела 3, после чего последовательно переместились и другие разделы

Перемещение ячеек очень напоминает перемещение разделов. Для этого нужно просто пользоваться методом moveRowAtIndexPath: toIndexPath:. Не забывайте, что ячейка может перемещаться либо в пределах одного раздела, либо из одного раздела в другой. Начнем с простого — переместим ячейку 1 из 1-го раздела на место ячейки 2 того же раздела и посмотрим, что получится:

— (void) moveCell1InSection1ToCell2InSection1{

NSMutableArray *section1 = [self.arrayOfSections objectAtIndex:0];

NSString *cell1InSection1 = [section1 objectAtIndex:0];

[section1 removeObject: cell1InSection1];

[section1 insertObject: cell1InSection1

atIndex:1];

NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForRow:0

inSection:0];

NSIndexPath *destinationIndexPath = [NSIndexPath indexPathForRow:1

inSection:0];

[self.myTableView moveRowAtIndexPath: sourceIndexPath

toIndexPath: destinationIndexPath];

}

Что же происходит в этом коде? Нам нужно гарантировать, что в источнике данных содержится корректная информация, которая отобразится в табличном виде по окончании всех перестановок. Поэтому сначала убираем ячейку 1 в разделе 1. В результате ячейка 2 переходит на место, освобожденное ячейкой 1, а ячейка 3 — на место, ранее занятое ячейкой 2. В массиве остается всего 2 ячейки. Потом мы вставляем ячейку 1 в индекс 1 (второй объект) массива. Таким образом, в массиве будут содержаться ячейка 2, ячейка 1, а потом ячейка 3. И вот теперь мы на самом деле переместили ячейки в табличном виде.

Теперь немного усложним задачу. Попробуем переместить ячейку 2 из раздела 1 на место ячейки 1 из раздела 2:

— (void) moveCell2InSection1ToCell1InSection2{

NSMutableArray *section1 = [self.arrayOfSections objectAtIndex:0];

NSMutableArray *section2 = [self.arrayOfSections objectAtIndex:1];

NSString *cell2InSection1 = [section1 objectAtIndex:1];

[section1 removeObject: cell2InSection1];

[section2 insertObject: cell2InSection1

atIndex:0];

NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForRow:1

inSection:0];

NSIndexPath *destinationIndexPath = [NSIndexPath indexPathForRow:0

inSection:1];

[self.myTableView moveRowAtIndexPath: sourceIndexPath

toIndexPath: destinationIndexPath];

}

Результаты

перехода показаны на рис. 4.14.

Рис. 4.14. Ячейка 2 из раздела 1 перемещена на место ячейки 1 из раздела 2

4.8. Удаление ячеек и разделов в табличных видах

Постановка задачи

Требуется удалять из табличных видов разделы и/или ячейки, сопровождая этот процесс анимацией.

Решение

Для удаления разделов из табличного вида выполните следующие шаги.

1. Сначала удалите раздел (-ы) в источнике данных независимо от того, с какой именно моделью данных вы работаете — Core Data или словарь/массив.

2. Примените к табличному виду метод экземпляра deleteSections: withRowAnimation:, относящийся к UITableView. Первый параметр, который нужно передать данному методу, имеет тип NSIndexSet. Этот объект можно инстанцировать с помощью метода класса indexSetWithIndex:, относящегося к классу NSIndexSet, где указываемый индекс — это беззнаковое целое число. Применяя такой подход, вы можете удалять только один раздел за раз. Если вы собираетесь удалить за раз более одного раздела, пользуйтесь методом класса indexSetWithIndexesInRange:, также относящимся к классу NSIndexSet, чтобы создать индексное множество с указанием диапазона. Это индексное множество передается описанному ранее методу экземпляра, относящемуся к UITableView.

Если вы хотите удалить ячейки в табличном виде, выполните следующие шаги.

1. Сначала удалите ячейку (ячейки) из источника данных. Здесь также не имеет значения, работаете ли вы с Core Data, обычным словарем, массивом или чем-то еще. Самое важное в данном случае — удалить из источника данных те объекты, которые соответствуют ячейкам табличного вида.

2. Теперь для удаления самих ячеек, соответствующих объектам данных, примените метод экземпляра deleteRowsAtIndexPaths: withRowAnimation:, относящийся к табличному виду. Первый параметр, который необходимо передать данному методу, — это массив типа NSArray. Данный массив должен содержать объекты типа NSIndexPath, и каждый индексный путь представляет одну ячейку в табличном виде. В каждом индексном пути содержится указание на раздел и на строку табличного вида. Этот путь составляется с помощью метода класса indexPathForRow: inSection:, относящегося к классу NSIndexPath.

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

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

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

Наша навсегда

Зайцева Мария
2. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Наша навсегда

Кодекс Крови. Книга ХVIII

Борзых М.
18. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVIII

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

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

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

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

Геном хищника. Книга пятая

Гарцевич Евгений Александрович
5. Я - Легенда!
Фантастика:
рпг
фэнтези
попаданцы
6.00
рейтинг книги
Геном хищника. Книга пятая

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

Двойник Короля 4

Скабер Артемий
4. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 4

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Инженер Петра Великого 5

Гросов Виктор
5. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
4.75
рейтинг книги
Инженер Петра Великого 5

Хозяин Теней 3

Петров Максим Николаевич
3. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Хозяин Теней 3

Бандит

Щепетнов Евгений Владимирович
1. Петр Синельников
Фантастика:
фэнтези
7.92
рейтинг книги
Бандит

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VI