uitableviewНачало работы с uitableview


замечания

В этом разделе представлен обзор того, что такое uitableview, и почему разработчик может захотеть его использовать.

Следует также упомянуть о любых крупных предметах в uitableview и ссылаться на связанные темы. Поскольку Документация для uitableview нова, вам может потребоваться создать начальные версии этих связанных тем.

Методы делегирования и источника данных:

Каждый вид таблицы должен иметь делегат и источник данных.

Методы делегата

Ни один из методов делегата не требуется, однако вам необходимо реализовать tableView: didSelectRowAtIndexPath: обрабатывать штрихи в ячейке таблицы:

И другие методы ...

// Display customization

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;

// Variable height support

// If these methods are implemented, the above -tableView:heightForXXX calls will be deferred until views are ready to be displayed, so more expensive logic can be placed there.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

// Section header & footer information. Views are preferred over title should you decide to provide both

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;   // custom view for header. will be adjusted to default or specified header height
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;   // custom view for footer. will be adjusted to default or specified footer height

// Accessories (disclosures). 

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;

// Selection

// Called before the user changes the selection. Return a new indexPath, or nil, to change the proposed selection.
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath;
// Called after the user changes the selection.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;


// Editing

// Allows customization of the editingStyle for a particular cell located at 'indexPath'. If not implemented, all editable cells will have UITableViewCellEditingStyleDelete set for them when the table has editing property set to YES.
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

// Controls whether the background is indented while editing.  If not implemented, the default is YES.  This is unrelated to the indentation level below.  This method only applies to grouped style table views.
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath;

             

// Indentation

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath; // return 'depth' of row for hierarchies
 

Источник данных Необходимые методы:

Из источника данных требуются следующие методы: tableView: numberOfRowsInSection: и tableView: cellForRowAtIndexPath :. Если ваша таблица является сгруппированной таблицей, вы также должны реализовать numberOfSectionsInTableView :.

Необходимые методы : -

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

// Row display.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
 

Дополнительные методы : -

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;              // Default is 1 if not implemented

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;    // fixed font style. use custom view (UILabel) if you want something different
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

// Editing

// Individual rows can opt out of having the -editing property set for them. If not implemented, all rows are assumed to be editable.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

// Moving/reordering

// Allows the reorder accessory view to optionally be shown for a particular row. By default, the reorder control will be shown only if the datasource implements -tableView:moveRowAtIndexPath:toIndexPath:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;

// Index

- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView;                                                    // return list of section titles to display in section index view (e.g. "ABCD...Z#")
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;  // tell table which section corresponds to section title/index (e.g. "B",1))

// Data manipulation - insert and delete support

// After a row has the minus or plus button invoked (based on the UITableViewCellEditingStyle for the cell), the dataSource must commit the change
// Not called for edit actions using UITableViewRowAction - the action's handler will be invoked instead
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

// Data manipulation - reorder / moving support

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
 

Анатомия таблицы клеток

По умолчанию UITableViewCell имеет несколько стандартных представлений и подпрограмм данных.

  • cell.textLabel - UILabel для ячейки
  • cell.detailTextLabel - меньшая UILabel, которая появляется под текстовой меткой
  • cell.imageView - UIImageView, что левая сторона ячейки

Дополнительный вид аксессуаров может содержать один из следующих значков. Стандартным аксессуаром является UITableViewCellAccessoryNone .

UITableView в деталях

Что такое UITableView?

UITableView - наиболее часто используемый объект пользовательского интерфейса, который представляет данные в прокручиваемом списке из нескольких строк в одном столбце, который также можно разделить на разделы. Он позволяет только вертикальную прокрутку и является подклассом UIScrollView .

Почему мы используем UITableView?

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

Мы можем видеть использование UITableView в наших контактах, списках рассылки и т. Д. Он предназначен не только для представления текстовых данных, но и изображений, а также текстов, которые можно указать, например, в приложении YouTube.

Подробные инструкции по настройке или установке UITableView с использованием Story Board.

  1. Создайте простой проект для приложения Single View.
  2. В библиотеке объектов выберите объект «Просмотр таблицы» и перетащите его в представление вашего контроллера вида. Просто запустив проект, вы увидите пустую страницу с линиями.
  3. Теперь, если вы просто хотите прокручиваемое представление с содержимым, перетащите UIView в UITableView , настройте его размер и перетащите остальную часть UIElements в это представление в соответствии с требованиями. Но если вы хотите представить список аналогичного формата, мы используем UITableViewCell .
  4. Класс UITableViewCell определяет атрибуты и поведение ячеек, которые отображаются в объектах UITableView. Этот класс включает в себя свойства и методы для настройки и управления содержимым и фоновым содержимым (включая текст, изображения и пользовательские представления), управление выбором ячейки и отображением состояния, управление видами аксессуаров и инициирование редактирования содержимого ячейки.
  5. Лучшая часть использования UITableViewCell - многоразовая. Цель dequeueReusableCellWithIdentifier состоит в том, чтобы использовать меньше памяти. Например, если у вас есть список из 1000 записей и только 10 записей видны одновременно, тогда только видимые ячейки распределяются в памяти, остальные повторно используются, как когда пользователь прокручивает список. Все, что вам нужно сделать, это перетащить UITableViewCell и перейти к tableView. Затем нажмите на ячейку-> Перейти к инспектору атрибутов-> Установить стиль tableView в пользовательский и идентификационный код на что-либо уникальное, которое вы хотели бы сказать myCell.
  6. Теперь нам нужно соответствовать источнику данных, чтобы объект передавал данные другому объекту. Например, протокол UITableViewDataSource имеет такие методы, как cellForRowAtIndexPath и numberOfRowsInSection определяют, что должно отображаться в таблице. В то время как объект типа делегата отвечает на действия, которые принимает другой объект. Например, протокол UITableViewDelegate имеет такие методы, как didSelectRowAtIndexPath для выполнения действий при выборе пользователем определенной строки в таблице. 7. Когда вы соответствуете источнику данных, вам необходимо реализовать его необходимый метод, т.е.
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
        // Here you need to give the total number of items you want to list. For example if you want list of 2 numbers, then:

           return 2; 

 }
 

а также

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

//Here you need to dequeue the reusable cell which we discussed in point 5. Then you can modify your cell here according to you and customize it here as per your requirement. Here the call comes for numberOfRows number of times. 

static NSString *cellIdentifier = @"cellID";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
cellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:
    UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
} 
if(indexPath.row){
    [cell.textLabel setText:"1"];
}else{
    [cell.textLabel setText:"2"];
}

return cell;
}
 
  1. Также о NSIndexPath: - Класс NSIndexPath представляет путь к определенному узлу в дереве вложенных массивов массивов. Этот путь известен как индексный путь. Его объекты всегда имеют длину 2. Они используются, например, для индексации ячейки таблицы. Первый индекс в объекте NSIndexPath называется секцией, второй - строкой. Объект указательного пути с секцией 0 и строкой 0 указывает первую строку в первом разделе. Используйте [NSIndexPath indexPathForRow:inSection:] чтобы быстро создать путь индекса.