iOS表格视图入门指南
立即解锁
发布时间: 2025-08-24 01:08:10 阅读量: 1 订阅数: 7 

### iOS 表格视图入门指南
#### 1. 表格视图基础
表格用于显示数据列表,列表中的每个项目为一行。iOS 表格的行数不受限制,仅受可用内存的约束,且表格宽度仅为一列。
表格视图是显示表格数据的视图对象,是 `UITableView` 类的实例;而表格视图中的每一行由 `UITableViewCell` 类实现。表格视图不负责存储表格数据,仅存储绘制当前可见行所需的数据。它从符合 `UITableViewDelegate` 协议的对象获取配置数据,从符合 `UITableViewDataSource` 协议的对象获取行数据。
虽然所有表格在实现上都是单列的,但像 YouTube 应用中的表格看似有多列,实际上每行仍由单个 `UITableViewCell` 表示。每个 `UITableViewCell` 对象可配置图像、文本和可选的辅助图标。若需要在单元格中放置更多数据,可通过两种基本技术向 `UITableViewCell` 添加子视图:创建单元格时以编程方式添加,或从 nib 文件加载。
#### 2. 表格视图样式
表格视图有两种基本样式:
- **分组样式(Grouped)**:分组表格中的每个组是一组嵌入圆角矩形的行,分组表格可以只有一个组。
- **普通样式(Plain)**:普通样式是默认样式,没有圆角矩形的表格即为普通表格视图。当使用索引时,这种样式也称为索引表格。
表格的每个分区在数据源中称为一个部分(section)。在分组表格中,每个组是一个部分;在索引表格中,每个索引分组的数据是一个部分。需要注意的是,虽然技术上可以创建带索引的分组表格,但 iPhone 人机界面指南明确规定分组表格不应提供索引。
#### 3. 实现简单表格
下面通过一个简单示例来了解表格视图的工作原理,此示例仅显示文本值列表。
- **创建项目**:在 Xcode 中创建新项目,选择单视图应用模板,项目命名为 `Simple Table`,类前缀为 `BID`,设备系列设为 iPhone,确保取消勾选“使用故事板”和“包含单元测试”复选框。
- **设计视图**:
1. 在项目导航器中展开 `Simple Table` 项目和文件夹。
2. 选择 `BIDViewController.xib` 编辑 GUI,若视图窗口不可见,单击其图标打开。
3. 在对象库中找到表格视图并拖到视图窗口,表格视图会自动调整大小以适应视图。
4. 选中表格视图,按 `⌘6` 打开连接检查器,将 `dataSource` 和 `delegate` 连接到 `File’s Owner`。
5. 保存 nib 文件。
- **编写控制器代码**:
- **头文件(BIDViewController.h)**:
```objc
#import <UIKit/UIKit.h>
@interface BIDViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (strong, nonatomic) NSArray *listData;
@end
```
- **实现文件(BIDViewController.m)**:
```objc
#import "BIDViewController.h"
@implementation BIDViewController
@synthesize listData;
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *array = [[NSArray alloc] initWithObjects:@"Sleepy", @"Sneezy",
@"Bashful", @"Happy", @"Doc", @"Grumpy", @"Dopey", @"Thorin",
@"Dorin", @"Nori", @"Ori", @"Balin", @"Dwalin", @"Fili", @"Kili",
@"Oin", @"Gloin", @"Bifur", @"Bofur", @"Bombur", nil];
self.listData = array;
}
- (void)viewDidUnload {
[super viewDidUnload];
self.listData = nil;
}
#pragma mark -
#pragma mark Table View Data Source Methods
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.listData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewC
```
0
0
复制全文
相关推荐










