表视图的创建--三个协议的使用

将要用到的协议  <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;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值