文档章节

通过实例来学习UITableView的用法

今日竹石
 今日竹石
发布于 2014/01/23 14:34
字数 1096
阅读 380
收藏 0

 UITableView是app开发中常用到的控件,功能很强大,多用于数据的显示。下面以一个简单的实例来介绍tableview的基本用法。

@interface  TableViewTestViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{

    UITableView *DataTable;

    NSMutableArray *dataArray1; //定义数据数组1

    NSMutableArray *dataArray2;//定义数据数组2

    NSMutableArray *titleArray;//定义标题数组

}

 

- (void)viewDidLoad

{

    [superviewDidLoad];

//初始化tableview

    DataTable = [[UITableViewallocinitWithFrame:CGRectMake(00320420)];//指定位置大小

    [DataTablesetDelegate:self];//指定委托

    [DataTablesetDataSource:self];//指定数据委托

    [self.viewaddSubview:DataTable];//加载tableview

    

    dataArray1 = [[NSMutableArrayallocinitWithObjects:@"中国"@"美国"@"英国"nil];//初始化数据数组1

    dataArray2 = [[NSMutableArrayallocinitWithObjects:@"黄种人"@"黑种人"@"白种人"nil];//初始化数据数组2

    titleArray = [[NSMutableArrayallocinitWithObjects:@"国家"@"种族"nil];//初始化标题数组

    

}

 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

 

 

//每个section显示的标题

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

    switch (section) {

        case 0:

            return [titleArray objectAtIndex:section];//提取标题数组的元素用来显示标题

        case 1:

            return [titleArray objectAtIndex:section];//提取标题数组的元素用来显示标题

        default:

            return @"Unknown";

    }

 

}

 

//指定有多少个分区(Section),默认为1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return [titleArray count];//返回标题数组中元素的个数来确定分区的个数

}

 

//指定每个分区中有多少行,默认为1

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    switch (section) {

        case 0:

           return  [dataArray1 count];//每个分区通常对应不同的数组,返回其元素个数来确定分区的行数

            break;

        case 1:

            return  [dataArray2 count];

            break;

        default:

            return 0;

            break;

    }

}

 

//绘制Cell

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 

    static NSString *CellIdentifier = @"Cell";

 //初始化cell并指定其类型,也可自定义cell

UITableViewCell *cell = (UITableViewCell*)[tableView  dequeueReusableCellWithIdentifier:CellIdentifier];

  if(cell == nil

  {

  cell = [[[UITableViewCellalloc

  initWithFrame:CGRectZero 

  reuseIdentifier:CellIdentifier] autorelease];

}

   switch (indexPath.section) {

  case 0://对应各自的分区

    [[cell textLabel]  setText:[dataArray1 objectAtIndex:indexPath.row]];//给cell添加数据

    break;

  case 1:

    [[cell textLabel]  setText:[dataArray2 objectAtIndex:indexPath.row]];

    break;

  default:

    [[cell textLabel]  setText:@"Unknown"];

}

  return cell;//返回cell

}

 

tableview还有很多高难度的属性和接口,在以后我会慢慢补齐。

 

上面的例子在功能上介绍了tableview的使用,但其在数据处理上具有很大的局限性。当我们要从服务器上请求数据,面对多种可能的数据(主要指数组的个数不稳定)此时上面的switch将无法满足我们的需求了。

使用switch可是代码的结构清晰明了,但其局限性很致命(switch中case的个数无法动态指定),下面的另一种方法可解决上述问题。

 

 

代码在原由基础上进行的修改:

@interface  TableViewTestViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{

    UITableView *DataTable;

    NSMutableArray *dataArray1;

    NSMutableArray *dataArray2;

    NSMutableArray *titleArray;

    NSMutableArray *dataArray; //加入了用于保存数组的数组 dataArray

}

 

- (void)viewDidLoad

{

    [superviewDidLoad];

    DataTable = [[UITableViewallocinitWithFrame:CGRectMake(00320420)];

    [DataTablesetDelegate:self];

    [DataTablesetDataSource:self];

    [self.viewaddSubview:DataTable];

    

    dataArray1 = [[NSMutableArrayallocinitWithObjects:@"中国"@"美国"@"英国"nil];

    dataArray2 = [[NSMutableArrayallocinitWithObjects:@"黄种人"@"黑种人"@"白种人"nil];

    titleArray = [[NSMutableArrayallocinitWithObjects:@"国家"@"种族"nil];

    dataArray = [[NSMutableArrayallocinitWithObjects:dataArray1dataArray2nil]; //初始化dataArray,元素为数组

    

}

 

 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

 //制定个性标题,这里通过UIview来设计标题,功能上丰富,变化多。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    UIView *view = [[[UIViewallocinitWithFrame:CGRectMake(0032040)] autorelease];

    [view setBackgroundColor:[UIColorbrownColor]];//改变标题的颜色,也可用图片

    UILabel *label = [[UILabelallocinitWithFrame:CGRectMake(5510030)];

    label.textColor = [UIColorredColor];

    label.backgroundColor = [UIColorclearColor];

    label.text = [titleArrayobjectAtIndex:section];

    [view addSubview:label];

     return view;

}

 //指定标题的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

    return 40;

}

 

//每个section显示的标题,有了上面的这个就不要了

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

}

 

//指定有多少个分区(Section),默认为1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return [titleArraycount];

}

 

//指定每个分区中有多少行,默认为1

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

   /* switch (section) {

        case 0:

           return  [dataArray1 count];

            break;

        case 1:

            return  [dataArray2 count];

            break;

        default:

            return 0;

            break;

    }*/

  /*  for(int i = 0; i < [titleArray count]; i++){

        if(section == i){

            return [[dataArray objectAtIndex:section] count];

        }

    }*/

  //上面的方法也是可行的,大家参考比较下

    return [[dataArray objectAtIndex:section] count];  //取dataArray中的元素,并根据每个元素(数组)来判断分区中的行数。

    

    

}

 

//绘制Cell

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 

    static NSString *CellIdentifier = @"Cell";

 

UITableViewCell *cell = (UITableViewCell*)[tableView 

                                               dequeueReusableCellWithIdentifier:CellIdentifier];

if(cell == nil

{

cell = [[[UITableViewCellalloc

initWithFrame:CGRectZero 

reuseIdentifier:CellIdentifier] autorelease];

}

 

/*switch (indexPath.section) {

case 0:

[[cell textLabel] 

setText:[dataArray1 objectAtIndex:indexPath.row]];

break;

case 1:

[[cell textLabel] 

setText:[dataArray2 objectAtIndex:indexPath.row]];

break;

default:

[[cell textLabel] 

setText:@"Unknown"];

}*/

    //上面的方法也可行,大家比较下

    [[cell textLabelsetText:[[dataArrayobjectAtIndex:indexPath.section]objectAtIndex:indexPath.row]];

 //同上,取出dataArray中每个分区所对应的元素(数组),并通过其来取值。 (大家要有想像力, 复制代码试试就明白了)

    

return cell;

 

}

 

 //改变行的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    return40;

}


© 著作权归作者所有

今日竹石
粉丝 41
博文 227
码字总数 181312
作品 0
朝阳
程序员
私信 提问
iOS开发tips-神奇的UITableView

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/71436920 概述 UITableView是iOS开发中使用频率最高的UI控件,在前面的文章中对于...

KenshinCui
2017/05/08
0
0
storyboard中用xib文件创建定制的UITableViewCell对象

IOS5.0之后,在UITableView里可直接绘制自定义的UITableViewCell,还不会自定义UITableViewCell,直接传送门。要记得的是storyboard中的identifier(标识)一定要和代码中一致,用起来直观方...

长平狐
2012/11/01
684
0
关于UITableView你知道多少——UITableView简单解析

转自萧宸宇的博客 UITableView是在iOS开发中,展示大量内容的首选。我个人认为的原因有以下几点: 1.UITableView的展现形式是为移动设备专门设计过的。有较好的人机交互体验。 2.从技术角度来...

浪子艾菲儿
2013/08/07
0
0
iOS深入学习(UITableView:系列1-最基本的东西)

这是UITableView博客系列的第一篇,使用xib和arc编码,主要讲解一些UITableView使用过程中简单的、但是又容易被忽略的东西,而且我会告诉读者,怎样在使用了之后就再也不会忘记。 操作的步骤...

召唤攻城狮
2014/05/18
0
1
UITableView 一些方法

1. UITableView的初始化 [csharp] view plain copy UITableView tableview= [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [tableview setDelegate:self]; [tableview s......

晨曦之光
2012/05/16
852
0

没有更多内容

加载失败,请刷新页面

加载更多

rsync工具常用选项以及同步的两种方式

rsync -av /etc/passwd /tmp/1.txt #rsync的本机传输写法 rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt #rsync的远程传输rsync格式rsync [OPTION] … SRC ......

林怡丰
今天
3
0
GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
3
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
5
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
6
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部