UITableView

原创 2015年11月21日 11:10:16

表格视图

_tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];
  • 显示一组数据

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

代码说明:协议方法,返回组数

  • 单元格的复用机制
static NSString *cellID = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];
    }

代码说明:
定义cell的Identifier,用tableView的dequeueReusableCellWithIdentifier方法进行复用

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return  _dataArray.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    BOOL state = [_stateArray[section] boolValue];
    if (state) {
        return [_dataArray[section]count];
    }else {
        return 0;
    }

}

代码说明:通过传入的indexPath.section值,来显示每个分组的数据

 cell.textLabel.text = @"小美";
 NSString *file = [NSString stringWithFormat:@"head%d.jpg",indexPath.row%2+1];
 cell.imageView.image = [UIImage imageNamed:file];
 cell.detailTextLabel.text = @"相约黄昏后";

代码说明:
UITableViewCell自带的控件有三个:textLabel,imageVie,detailTextLabel.其位置排列如图所示.

  • 单元格行的高度

代码

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 44.0f;
}

代码说明:cell默认高度为44.是iOS界面设计中最小最适宜的面积的触控面积,若要修改,可根据此协议方法进行修改

  • 单元格的背景

代码:


UIImageView *backView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
backView.image = [[UIImage imageNamed:@"table_cell_bg.png"] stretchableImageWithLeftCapWidth:8 topCapHeight:0];
cell.backgroundView = backView;
  • 单元格的内容视图contentView

代码:

 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 100, 30)];
label.tag = 100;
//给label设置值放在外面
[cell.contentView addSubview:label];

代码说明:
cell自己添加控件,都加在contentView上,由于cell复用,这句代码不能写在if语句外面.


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIAlertView *alertView = [[UIAlertView alloc] init];
    alertView.message = [NSString stringWithFormat:@"您点击了%d组%d行",indexPath.section,indexPath.row];
    [alertView addButtonWithTitle:@"取消"];
    [alertView show];
}
  • 某行被反选

代码

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
UIAlertView *alertView = [[UIAlertView alloc] init];
alertView.message = [NSString stringWithFormat:@"您取消选择%ld组%ld行",indexPath.section,indexPath.row];
[alertView addButtonWithTitle:@"取消"];
[alertView show];

}
UIImageView *headView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];
headView.image = [UIImage imageNamed:@"fenjing.jpg"];
_tableView.tableHeaderView = headView;

代码说明:利用tableView的tableHeaderView属性来设置

  • 尾部视图

代码

UIImageView *footView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];
footView.image = [UIImage imageNamed:@"fenjing.jpg"];
_tableView.tableFooterView = footView;

代码说明:利用tableView的tableFooterView属性来设置

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return [NSString stringWithFormat:@"第%ld段",section];
}
  • 设置自定义段头

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
    label.text  = [NSString stringWithFormat:@"第%ld段",section];
    return label;
}
  • 设置段头高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 60;
}
  • 设置段尾

- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
    return @"我是段尾!";
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    //重要参数:
    //editingStyle 传入编辑风格(None,Delete,Insert)
    //forRowAtIndexPath: 传入删除或者插入的位置
    if(editingStyle == UITableViewCellEditingStyleDelete)
    {
        //处理删除操作
        NSMutableArray *subArray = _dataArray[indexPath.section];
        [subArray removeObjectAtIndex:indexPath.row];
    }

    //注意: 以后任何对于表格视图中数据的改变, 都应该调用这个方法,让表格视图重新加载新的数据
    [_tableView reloadData];

}
  • 单元格的增加操作

代码:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    //重要参数:
    //editingStyle 传入编辑风格(None,Delete,Insert)
    //forRowAtIndexPath: 传入删除或者插入的位置      
    if(editingStyle == UITableViewCellEditingStyleInsert)
    {
        NSString *info = @"三里屯认识的阿娟";

        //插入位置 indexPath
        NSMutableArray *subArray = _dataArray[indexPath.section];
        [subArray insertObject:info atIndex:indexPath.row];
    }

    //注意: 以后任何对于表格视图中数据的改变, 都应该调用这个方法,让表格视图重新加载新的数据
    [_tableView reloadData];

}
  • 单元格的移动操作

代码:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    //单元格移动之后数据并没有自动移动, 需要手动移动
    //分两步: 1.源数组中移除数据
    NSMutableArray *sourceArray = _dataArray[sourceIndexPath.section];
    NSString *info = sourceArray[sourceIndexPath.row];
    [sourceArray removeObject:info];

    //2. 目标数组中添加数据
    NSMutableArray *destinationArray = _dataArray[destinationIndexPath.section];
    [destinationArray insertObject:info atIndex:destinationIndexPath.row];

    //
    [_tableView reloadData];
}
  • 多行选中和多行删除操作

(NSIndexPath *)indexPath
{
    NSString *info = _dataArray[indexPath.section][indexPath.row];
    [_multiSelectArray addObject:info];

    //以后多选有严格要求的话: 最好记录 indexPath
}

//当取消选择一个单元格时执行
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *info = _dataArray[indexPath.section][indexPath.row];
    [_multiSelectArray removeObject:info];
}
//返回的是组的标签的索引(电话号码本边上的一列快速查询字母)
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    NSMutableArray *array = [NSMutableArray array];
    for (int i=0; i<26; i++) {
        [array addObject:[NSString stringWithFormat:@"%c",i+'A']];
    }
    return array;
}
//分割线的设置
    _tableView.separatorColor = [UIColor blackColor];
    _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

//创建搜索条
    _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    _searchBar.placeholder = @"请输入您想要找的号码";
    _tableView.tableHeaderView = _searchBar;

    //有两种处理搜索的方式:
    //  1.使用系统类处理搜索
    //  2.新建一个界面处理搜索
    //系统UISearchDisplayController中包含一个tableView
    //      可以用这tableView显示搜索后的数据
    _searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self];
    //要给_searchDisplayController提供搜索结果
    _searchDisplayController.searchResultsDataSource = self;
    //注意: 当搜索框中文本改变时执行搜索

    //viewDidLoad中
    _searchResultsArray = [[NSMutableArray alloc] init];
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

UITableView

  • 2017-05-19 15:51
  • 239KB
  • 下载

IOS UITableView及索引条源码

  • 2017-09-14 15:34
  • 2.25MB
  • 下载

UITableView实现加载更多数据

类似于微博、博客这样的应用,通常都需要数据分页。而数据分页常用的做法是在UITableView控件上追加新的数据。从而有效提高用户体验。接下来将介绍其实现过程。 一、实现思路 基本上就是数据源里先...

UITableView

  • 2014-09-06 13:01
  • 19KB
  • 下载

UITableView循环重复显示的问题

我在写一个App的时候自定义了一个UITableViewCell,但是这个UITableView在运行的时候出现了每6行数据就循环重复显示的问题,而直接使用cell.textLabel.text显示是...

swift UITableView 闭包 block

  • 2015-07-10 12:49
  • 61KB
  • 下载

UITableView教材

  • 2012-04-19 12:43
  • 928KB
  • 下载

【iOS】UITableView 动态确定cell的高度

最近在开发一个收货地址的页面。需要动态确定cell的高度。就是详细地址比较长的时候需要换行显示出来,详细地址有的长有的短,这就导致了cell的高度不一致。 在《  iOS --- 根据文本内容确定文...

IOS UITableView下拉刷新控件

  • 2013-10-18 14:20
  • 850KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)