将要用到的协议 <UITableViewDataSource,UITableViewDelegate,UIActionSheetDelegate>
一、新建一个单视图工程(个人代码前缀为We)
1、首先在WeViewController.h中添加一个表视图的属性
@property (retain,nonatomic) UITableView *mTabview;
2、在WeViewController.m中初始化
- (void)viewDidLoad
{
[super viewDidLoad];
//初始化表视图,边界为当前视图,类型为无格式表
self.mTableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
//将表视图添加到view
[self.view addSubview:self.mTableView];
}
运行得到图1
二、向表中添加数据
1、首先在WeViewController.h中添加属性,并添加协议<UITableViewDataSource,UITableViewDelegate>
@property (retain,nonatomic) NSArray *mArr;
查看协议UITableViewDataSource可知有两个必须实现的协议,下面在WeViewController.m会详细讲
2、在WeViewController.m中
- (void)viewDidLoad
{
[super viewDidLoad];
//初始化表视图,边界为当前视图,类型为无格式表
self.mTableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
//将表视图添加到view
[self.view addSubview:self.mTableView];
//数组初始化, 等号右面返回系统自带字体名称数组
self.mArr = [UIFont familyNames];
//设置委托
self.mTableView.dataSource = self;
self.mTableView.delegate =self;
}
//UITableViewDataSource协议的实现部分
#pragma mark------dataSource------
//每一段,即section中的表行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.mArr count];
}
//每行的绘制
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifer = @"identfier";
UITableViewCell *pCell = [tableView dequeueReusableCellWithIdentifier:identifer];
//判断pCell是否为空,若为空则创建一个
if (nil == pCell)
{
pCell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifer];
}
//获取当前行
NSUInteger cellRow = [indexPath row];
//根据行数找到数组中对应下标的数据
NSString *pTempStr = [self.mArr objectAtIndex:cellRow];
//设置文本内容
pCell.textLabel.text = pTempStr;
//设置文本字体
pCell.textLabel.font = [UIFont fontWithName:pTempStr size:18];
pCell.detailTextLabel.text = @"detailText";
pCell.imageView.image = [UIImage imageNamed:@"aio_image"];
//设置accessory 的类型
pCell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
return pCell;
}
运行结果如图2
三、delegate部分
1、在WeViewController.h添加协议UIActionSheetDelegate,以实现点击每行会有相应动作
2、协议的实现部分
#pragma mark----delegate-----
//选中某一行会调用
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
NSString *pStr = [NSString stringWithFormat:@"你选中了第%d行",row];
//模态视图
UIActionSheet *pActionSheet = [[UIActionSheet alloc]initWithTitle:@"ActionSheet" delegate:self cancelButtonTitle:@"确认" destructiveButtonTitle:pStr otherButtonTitles:nil, nil];
[pActionSheet showInView:self.view];
//选中行逐渐淡出
[self.mTableView deselectRowAtIndexPath:indexPath animated:YES];
}
#pragma mark----actionSheet delegate----
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch (buttonIndex)
{
case 0:
NSLog(@"case 0");
break;
case 1:
NSLog(@"case 1");
break;
default:
break;
}
}
运行结果如图3
当选择不同的按钮式,有不同的响应,如图4
四、此外还有其他协议中的方法可以对表进行操作
#pragma mark --- tableView DataSource----
//设置表头
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return @"I'm Header_Title";
}
//设置表尾
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
return @"I'm Footer_Title";
}
#pragma mark---table delegate-----
//调整行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
//调整header 高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 20;
}
//行内容进行偏移
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 0;
}