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

@interface TableViewTestViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{

UITableView *DataTable;

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

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

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

}

- (void)viewDidLoad

{

[superviewDidLoad];

//初始化tableview

DataTable = [[UITableViewalloc] initWithFrame:CGRectMake(0, 0, 320, 420)];//指定位置大小

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

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

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

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

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

titleArray = [[NSMutableArrayalloc] initWithObjects:@"国家", @"种族", 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 = [[UITableViewalloc] initWithFrame:CGRectMake(0, 0, 320, 420)];

[DataTablesetDelegate:self];

[DataTablesetDataSource:self];

[self.viewaddSubview:DataTable];

dataArray1 = [[NSMutableArrayalloc] initWithObjects:@"中国", @"美国", @"英国", nil];

dataArray2 = [[NSMutableArrayalloc] initWithObjects:@"黄种人", @"黑种人", @"白种人", nil];

titleArray = [[NSMutableArrayalloc] initWithObjects:@"国家", @"种族", nil];

dataArray = [[NSMutableArrayalloc] initWithObjects:dataArray1, dataArray2, nil]; //初始化dataArray,元素为数组

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

// Return YES for supported orientations

return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

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

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

UIView *view = [[[UIViewalloc] initWithFrame:CGRectMake(0, 0, 320, 40)] autorelease];

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

UILabel *label = [[UILabelalloc] initWithFrame:CGRectMake(5, 5, 100, 30)];

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 textLabel] setText:[[dataArrayobjectAtIndex:indexPath.section]objectAtIndex:indexPath.row]];

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

return cell;

}

//改变行的高度

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

return40;

}

 
 
分类: iPhone
标签: UITableView
 

UITableView的详细使用的更多相关文章

  1. (转载)UITableView的详细讲解

    NSIndexPath类型是用来获取用户选择的indexPath,在别的函数里面,若需要知道用户选择了哪个cell,用上它可以省事很多.不必再去建全局变量section和row. NSIndexPat ...

  2. [转] 详细整理:UITableView优化技巧

      原文:http://www.cocoachina.com/ios/20150602/11968.html   最近在微博上看到一个很好的开源项目VVeboTableViewDemo,是关于如何优化 ...

  3. UITableView详细注释

    style //普通 UITableViewStylePlain, //分组 UITableViewStyleGrouped //表格视图 UITableView * tableView = [[UI ...

  4. UITableView全面解析,讲的好详细

    --UIKit之UITableView 概述 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是U ...

  5. UITableView(二)

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  6. iOS 编辑UITableView(根据iOS编程编写)

    上个项目我们完成了 JXHomepwner 简单的应用展示,项目地址.本节我们需要在上节项目基础上,增加一些响应用户操作.包括添加,删除和移动表格. 编辑模式 UITableView 有一个名为  e ...

  7. 使用Autolayout实现UITableView的Cell动态布局和高度动态改变

    本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...

  8. JSPatch来更新已上线的App中出现的BUG(超级详细)

    JSPatch的作用是什么呢? 简单来说:(后面有具体的操作步骤以及在操作过程中会出现的错误) 1.iOS应用程序上架到AppStore需要等待苹果公司的审核,一般审核时间需要1到2周.虽然程序在上架 ...

  9. 使用UITableView的分组样式

    分组样式顾名思义是对TableView中的数据行进行分组处理,每个分组都有一个header和footer. TableView中header的英文文本是大写的,footer的英文文本是小写的.如下图浅 ...

随机推荐

  1. hdu 1106 排序

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  2. Scrapy:Python的爬虫框架

    网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻 ...

  3. oracle存储过程含参数的插入数据

    create or replace procedure proczipcodebyzipinsert(   i_zipcode  in  zipcode.zip%type,   i_city in z ...

  4. C#中反射接受的字符串需要满足的Backus-Naur Form语法

    MSDN的Specifying Fully Qualified Type Names指明了C#中反射接受的字符串需要满足如下的Backus-Naur Form语法. BNF grammar of fu ...

  5. Axure7.0.0.3155注册码

    Licence:aaa Key1:h624pifAqt7It5e8boKkML+Y4RjDX5xknP4k7QktJYQoxsvv7VUS7hBCv/2ef45P Key2:2GQrt5XHYY7SB ...

  6. 分享一个linux和linux的文件传输【scp无密码传输】

    很多时候,本地测试服务器想把文件传到线上服务器的时候,很多人都是通过登陆线上服务器ssh 传输,这样挺危险的,很多弊端....所以我找了下方法,发现scp挺好用的! 模拟环境: 192.168.147 ...

  7. 网络编程---(数据请求+slider)将网络上的大文件下载到本地,并打印其进度

    网络编程---将网络上的大文件下载到本地,并打印其进度. 点击"開始传输"button.将网络上的大文件先下载下来,下载完毕后,保存到本地. UI效果图例如以下: watermar ...

  8. Android-Socket传输 GPRS网络

    手机使用GPRS网络与server进行Socket通信,代码下载地址:http://download.csdn.net/detail/wu20093346/7768481 用UDP协议与Socket调 ...

  9. Android开发ScrollView上下左右滑动事件冲突整理一(根据事件)

    主要通过重写 onInterceptTouchEvent 事件来解决,代码如下: package com.cm.android.pad.view.itemView; import android.co ...

  10. java中-静态代码块、构造代码块、构造方法的联系

    例如该题: 1 class Fu{ static { System.out.println("这是父类静态代码块"); } { System.out.println("这 ...