之前的一篇文章大概讲述了一下UITableView的使用,UITableView在iOS的地位和ListView在Android中的地位基本上算是不相上下,关于ListView的优化网上的也有很多文章。UITableView苹果公司本身就已经优化了其中的功能,不管你有多少数据,每次加载的时候只是加载当前页面的数据,以免造成不必要的内存占用。一个非常常见的优化就是使用Identifier,也就是唯一标示,将页面中不用的对象放在缓存池中,如果有新的对象出现从缓存池中取出。

页面布局

页面布局还是跟上篇文章一样,一个TableView:

不过需要额外的工作的时本次暂时的是服装信息,通过弹框修改服装的价格,需要新建一个服装类,实现UIAlertViewDelegate协议,头文件中的声明:

@interface ViewController : UIViewController <UITableViewDataSource,UITableViewDelegate,UIAlertViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end

服装类的定义:

@interface Dress : NSObject

@property (strong,nonatomic) NSString *dressName;

@property (strong,nonatomic) NSString *dressDetial;

@property (strong,nonatomic) NSString  *dressImage;

@end

优化与实现  

优化之前先实现一些必要的功能,以及一些方法的使用,上篇文章只是涉及了其中的一部分,为了更好的理解,可以先看下实现的效果:

定义存储数据的数组:

@interface ViewController ()
{
NSArray *imageArr;
NSArray *dressArr;
NSMutableArray *dressList;
}
@end

初始化数据:

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
imageArr=[[NSArray alloc]initWithObjects:@"dress1.jpeg",@"dress2.jpg",@"dress3.jpg",nil];
dressArr=[[NSArray alloc]initWithObjects:@"七匹狼",@"森马",@"杰克琼斯",@"美特斯邦威",@"以纯",@"真维斯",@"海南之家",nil];
dressList=[NSMutableArray arrayWithCapacity:30];
for (NSInteger i=0; i<30; i++) {
Dress *dress=[[Dress alloc]init];
NSInteger imageRandom=arc4random_uniform(3);
NSInteger dressRandom=arc4random_uniform(7); NSInteger price=arc4random_uniform(1000)+100; dress.dressImage=imageArr[imageRandom];
dress.dressName=dressArr[dressRandom];
dress.dressDetial=[NSString stringWithFormat:@"促销价:%ld",(long)price];
[dressList addObject:dress];
}
}

 设置行数:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [dressList count];
}

 设置分组:

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

 设置单元格内容,通过reuseIdentifier设置重用的单元格,dequeueReusableCellWithIdentifier取出可以重用的单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *flag=@"cacheCell";
//生成唯一的标记
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:flag];
if (cell==nil) {
//设置需要显示详情的样式
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:flag];
}
Dress *dress=dressList[indexPath.row]; UIImage *image=[UIImage imageNamed:dress.dressImage];
[cell.imageView setImage:image];
[cell.imageView setFrame:CGRectMake(0, 0, 80, 50)];
[cell.textLabel setText:dress.dressName];
//设置展示小箭头
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
//设置Tag
// [cell setTag:indexPath.row]; [cell.detailTextLabel setText:dress.dressDetial]; NSLog(@"获取更新之后的行:%ld",indexPath.row);
return cell;
}

选中行之后的弹框设置:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UIAlertView *alterView=[[UIAlertView alloc] initWithTitle:@"服装价格:" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"修改", nil];
[alterView setAlertViewStyle:UIAlertViewStylePlainTextInput];
//选中的Cell
UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath]; UITextField *textField=[alterView textFieldAtIndex:0]; //设置修改的服装信息
[textField setText:cell.detailTextLabel.text]; [textField setTag:indexPath.row];
[alterView show];
}

 UIAlterView中的点击事件:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex==1) { UITextField *textField=[alertView textFieldAtIndex:0]; NSArray *selectedRow=[self.tableView indexPathsForSelectedRows]; NSIndexPath *indexPath=selectedRow[0]; Dress *dress=dressList[indexPath.row]; dress.dressDetial=textField.text; NSLog(@"%@---%ld",textField.text,(long)indexPath.row); [self.tableView reloadRowsAtIndexPaths:selectedRow withRowAnimation:UITableViewRowAnimationRight]; }
}

 设置行高:

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

关于UITable的优化:

1.最常用的就是不重复生成单元格,很常见,很实用;

2.使用不透明的视图可以提高渲染速度,xCode中默认TableCell的背景就是不透明的;

3.如果有必要减少视图中的条目,本文中设置textLabel,detialTextLabel,imageView,accessoryType;

4.更新条目的时候不要整体更新,更新选中的即可,建议reloadRowsAtIndexPaths,而不是使用reloadData;

iOS开发-UITableView表格优化的更多相关文章

  1. 李洪强iOS开发之性能优化技巧

    李洪强iOS开发之性能优化技巧 通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view ...

  2. iOS开发UITableView基本使用方法总结

    本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDa ...

  3. iOS开发UITableView基本使用方法总结 分类: ios技术 2015-04-03 17:51 68人阅读 评论(0) 收藏

    本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDa ...

  4. iOS开发,UITableView相关问题

    第一条:UITableViewCell 内容的设置 //文本放到最后 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_dataArr.co ...

  5. iOS开发-UITableView自定义Cell

    UITableView在iOS中开发的重要地位是毋庸置疑的,基本上应用中用到的比例是一半左右,而且大部分情况都是需要自定义单元格的,这样用户看到的App才能更有美感.之前写过UITableView的基 ...

  6. iOS开发--项目内存优化

    在用非ARC模式编写iOS程序的时候,造成程序内存泄露在所难免,后期我们一般会进行内存优化.自己比较常用的内存优化方法有两种 1.Analyze,静态分析内存泄露的方法.很简单,在Xcode菜单栏中点 ...

  7. iOS开发 UITableView之cell

    1.cell简介 UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行 U ...

  8. iOS开发之性能优化

    1.避免过于庞大的XIB 当加载XIB的时候把所有的东西都放在了内存里,包括任何的图片:如果有一个不会即刻用到的view,就会浪费宝贵的内存资源了. 当加载一个引用了图片或者声音资源的nib时,nib ...

  9. iOS开发-UITableView常用方法

    UITableView常用来展示数据,类似于Android中的ListView,相对于Android中的ListView而言,UITableView的实现是非常简单,继承UITableViewData ...

随机推荐

  1. 20169211《Linux内核原理与分析》 第九周作业

    一.Linux内核虚拟文件系统学习总结 Linux支持各种文件系统,Linux内核通过虚拟文件系统了对各种文件系统共性的进行抽象,并对外提供统一接口,从面向对象编程的角度来看,称为抽象文件系统更为合适 ...

  2. CSU - 2061 Z‘s Coffee

    Description Z is crazy about coffee. One day he bought three cups of coffee. The first cup has a cap ...

  3. BZOJ.3611.[HEOI2014]大工程(虚树 树形DP)

    题目链接 要求的和.最大值.最小值好像都可以通过O(n)的树形DP做,总询问点数<=2n. 于是建虚树就可以了.具体DP见DP()函数,维护三个值sum[],mx[],mn[]. sum[]要开 ...

  4. 异常:The server committed a protocol violation

    异常记录: Exception rethrown at [0]: 在 Wintop.Windows.FrmLogin.btnLogin_Click(Object sender, EventArgs e ...

  5. UVA 2474 - Balloons in a Box 爆搜

    2474 - Balloons in a Box 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&a ...

  6. ControllerEvent

    1.TouchDown  --->按下去 响应事件 2.TouchRepeat --->重复点击 ,从第二次点击开始响应事件 3.TouchDragInside  ---->在组建范 ...

  7. Centos安装Perforce

    Author: JinDate: 20140827System: CentOS release 6.5 (Final) 参考:http://www.cnblogs.com/itech/archive/ ...

  8. solaris 10系统配置工具

    bash-3.2# prtdiag 报告一般系统信息 System Configuration: VMware, Inc. VMware Virtual Platform BIOS Configura ...

  9. WIN8.1 IE11 F12开发者人员工具,开启什么都不显示

    WIN8.1 IE11 F12开发者人员工具,开启什么都不显示,求大神帮忙?  IE11也没法重装, 还原IE设置过了. 没有效果.   也试过把IE停掉,重启后再重新打开 也没用 已经解决了  删除 ...

  10. tomcat启动时间修改

    Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. If the server requires ...