哈哈哈,初次写写博客。来记录记录我学习iOS过程中的学到的一些东西,并不想照搬书上的文字内容,仅是写写我自己的学习记录。各位随便看看。
iOS的UITableView是开发中用得最广泛的控件,像微信、各种新闻、知乎日报等app的主体差不多就是它了,手机自带的通讯录、短信等也使用了它。可以看出它的功能很强大,用途广泛,在书上学习都要用好几章,我也不打算一口气写完,想分成几篇来记录。
UITableView的功能主要是用于显示数据列表,可以显示很多行数据,不过它的列只有一列(有多列的列表视图UICollectionView)。
现在先来做个简单的UITableView的应用:
1.用Xcode新建一个iOS Application,选择使用Single View Application模板,项目名称为SimpleTable;
2.修改Main.storyboard文件。
从库面板里面选择Table View控件(注意不是Table Viw Controller),把它拖到默认的试图控制器上。之后可以在模拟器上运行一下,可以看到app的界面上有了些空白行,这是因为表视图并没有任何数据可以显示,也没有实现显示数据的方法。所以接下来,要指定表视图的数据源和委托对象。
按住control、选择表视图拖到View Controller图标放开(或者直接用鼠标右键拖),会出现一个弹出框,选择dataSource,接着再拖一次,选择delegate。这样就把表视图的数据源和委托对象都指定为这个View Controller视图对应的控制器类了。在表视图对应的属性检查器中也可以查看表视图指定的dataSource和delegate对象。
3.修改ViewController.h文件,让它实现UITableViewDataSource协议和UITableViewDelegate协议。即
@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> @end
4.修改ViewController.m文件,定义一个数组,用于存储需要显示的数据。即添加如下代码(红色部分)
@interface ViewController () @property (copy, nonatomic) NSArray *datas; @end
修改 - (void)viewDidLoad 方法,在这里初始化数组,可以按照自己的意愿让表视图显示什么内容。
- (void)viewDidLoad { [super viewDidLoad]; // 这里只是简单的显示一些简单的文字,实际情况会根据需要从数据库、list文件、网络等读取数据,也有可能不止初始化这一个数组 self.datas = @[@"data 1", @"data 2", @"data 3", @"data 4", @"data 5", @"data 6", @"data 7", @"data 8", @"data 9", @"data 10", @"data 11", @"data 12", @"data 13", @"data 14", @"data 15"]; }
这样,数据源有了,接下来就该实现显示数据的方法了。
5.在ViewController.m文件里面添加实现方法。
需要实现的方法有
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // 其实tableView可以被分成很多section,每个部分在视图上是独立分开的,在此app中,不区分section,所有的数据都显示在一个部分,所以直接返回datas的长度 return [self.datas count]; }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // 定义标示符 static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier"; // 声明一个cell对象,这个方法是从可重用队列里面取出一个表格单元,如果没有可重用单元格,就会返回nil,就需要判断 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier]; if (cell == nil) { // 如果没有可重用的单元格对象,就使用标示符重新创建一个单元格对象, cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier]; } // textLabel是默认的单元格包含的一个文本标签,设置它的text属性为datas中的数据 cell.textLabel.text = self.datas[indexPath.row]; return cell; }
这样,再运行一下app,得到如下结果