Вход/Регистрация
iOS. Приемы программирования
вернуться

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

Шрифт:

Рис. 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.

  • Читать дальше
  • 1
  • ...
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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