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

可选附件视图可能包含以下图标之一。默认的accessoryType是UITableViewCellAccessoryNone

UITableView详细介绍

什么是UITableView?

UITableView 是一个最常用的用户界面对象,它在一列中的多行可滚动 列表中显示数据,也可以分为几个部分。它只允许垂直滚动,是UIScrollView 的子类。

为什么我们使用UITableView?

我们可以使用UITableView 来显示可以选择的选项列表 ,浏览分层结构数据 ,显示项目索引列表,以及使用部分在视觉上不同的分组中显示详细信息和控件。

我们可以在我们的联系人,邮件列表等中看到UITableView 使用。它不仅用于呈现文本数据,还可以列出图像以及文本,例如在YouTube应用程序中。

有关使用Story Board设置或安装UITableView的详细说明。

  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:] 快速创建索引路径。