首页 > 代码库 > 简单的TableView
简单的TableView
背景知识
每个表都是UITableView的实例,表中的每一行都是UITableViewCell的实例。
TableView的种类
- Grouped table
- Plain table without index
- Plain table with index
NSIndexPath
- NSIndexPath.section 返回int,表示第几个Section
- NSIndexPath.row 返回int,表示该Section下的第几行
UITableViewCell包含的元素
- Image (imageView.image)
- Text Label (textLabel.text, textLabel.font)
- Detail Text Label (detailTextLabel.text)
UITableViewCell样式
- UITableViewCellStyleDefault
- UITableViewCellStyleSubtitile
- UITableViewCellStyleValue1
- UITableViewCellStyleValue2
简单例子
StoryBoard拖入一个TableView,然后设置DataSource和Delegate为ViewController。
ViewController.h声明协议
#import <UIKit/UIKit.h>@interface XYZViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>@end
ViewController.m文件如下
//// XYZViewController.m// TableView//// Created by Norcy on 14-7-24.// Copyright (c) 2014年 QQLive. All rights reserved.//#import "XYZViewController.h"@interface XYZViewController ()@property (strong, nonatomic)NSArray *array;@end@implementation XYZViewController- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.array = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"11", @"12", @"13", @"14", @"15", nil];}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}#pragma mark -#pragma mark Data Source Methods- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [self.array count];}#pragma mark Delegate Methods- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellId = @"MyCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellId]; } cell.textLabel.text = self.array[indexPath.row]; UIImage *image = [UIImage imageNamed:@"1.png"]; cell.imageView.image = image; cell.detailTextLabel.text = @"Details"; return cell;}- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{ return indexPath.row;}@end
代码说明
代码说明1:
static NSString *CellID = @"MyCell";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];if (cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellID];}
从ReusableCell的队列中取出带有Identifier标识的Cell,如果Cell为空,则新创建一个。
ReusableCell队列是专门存放那些生成过的,但是后来由于滚动tableView而隐藏起来的cell。这样做可以节约资源。
注意CellIdentifier这个参数是可以自定义的,如果使用storyboard的话需要跟storyboard中的cell的Identifier相同。
- dequeueReusableCellWithIdentifier: 可能返回nil
- dequeueReusableCellWithIdentifier:forIndexPath: 不可能返回nil
所以如果使用dequeueReusableCellWithIdentifier:forIndexPath的话就不用检查nil的情况了。
代码说明2:
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{ return indexPath.row;
}
设置缩进。
代码说明3:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row == 0) return nil; else return indexPath;}
选中某行之前调用,返回nil表示该行不能被选择,返回indexPath表示可以继续选择(可以返回其他路径但最好不要更改用户的选择,所以一般返回nil或indexPath来表示禁止或允许某个选择)
代码说明4:
- (void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES];}
选中某行之后调用,一般要调用deselectRowAtIndexPath
代码说明5:
cell.textLabel.font = [UIFont boldSystemFontOfSize:50];- (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 70;}
设置TableViewCell的行高以适应TableViewCell的字体
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。