您的位置:首页 > 产品设计 > UI/UE

UIScrollView && UITableView相关属性汇总(2013)

2015-11-26 23:10 435 查看
1,UIScrollView:

tracking//当touch后还没有拖动的时候值是YES,否则NO

zoomBouncing//当内容放大到最大或者最小的时候值是YES,否则NO

zooming//当正在缩放的时候值是YES,否则NO

decelerating//当滚动后,手指放开但是还在继续滚动中。这个时候是YES,其它时候是NO

decelerationRate//设置手指放开后的减速率

maximumZoomScale//一个浮点数,表示能放最大的倍数

minimumZoomScale//一个浮点数,表示能缩最小的倍数

pagingEnabled//当值是YES会自动滚动到subview的边界。默认是NO

scrollEnabled//决定是否可以滚动

sView.contentSize=CGSizeMake(320*5,372);//滚动的范围

delaysContentTouches//是个布尔值,当值是YES的时候,用户触碰开始,scrollview要延迟一会,看看是否用户有意图滚动。假如滚动了,那么捕捉touch-down事件,否则就不捕捉。假如值是NO,当用户触碰,scrollview会立即触发touchesShouldBegin:withEvent:inContentView:,默认是YES

canCancelContentTouches//当值是YES的时候,用户触碰后,然后在一定时间内没有移动,scrollView发送trackingevents,然后用户移动手指足够长度触发滚动事件,这个时候,scrollView发送了touchesCancelled:withEvent:到subview,然后scroView开始滚动。假如值是NO,scrollView发送trackingevents后,就算用户移动手指,scrollView
也不会滚动。

contentSize//里面内容的大小,也就是可以滚动的大小,默认是0,没有滚动效果。

showsHorizontalScrollIndicator//滚动时是否显示水平滚动条

showsVerticalScrollIndicator//滚动时是否显示垂直滚动条

bounces//默认是yes,就是滚动超过边界会反弹有反弹回来的效果。假如是NO,那么滚动到达边界会立刻停止。

bouncesZoom//和bounces类似,区别在于:这个效果反映在缩放上面,假如缩放超过最大缩放,那么会反弹效果;假如是NO,则到达最大或者最小的时候立即停止。

directionalLockEnabled//默认是NO,可以在垂直和水平方向同时运动。当值是YES时,假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动。假如一开始是对角方向滚动,则不会禁止某个方向

indicatorStyle//滚动条的样式,基本只是设置颜色。总共3个颜色:默认、黑、白

scrollIndicatorInsets//设置滚动条的位置

2,UITableView
tableView.bounces=NO//禁止拖动
tableView.separatorStyle=UITableViewCellSeparatorStyleNone;//去掉边框

[cellViewsetSelectionStyle:UITableViewCellSelectionStyleNone];//禁止触发点击某行
//实现某行的选中效果(点击某行变颜色,松开还是刚变的颜色,点击其他行这行颜色消失):

[cellViewsetBackgroundColor:[UIColorclearColor]];

cellView.selectedBackgroundView=[[[UIViewalloc]initWithFrame:cellView.frame]
autorelease];

UIImageView*ia1=[[UIImageViewalloc]initWithFrame:CGRectMake(0,0,280,170)];
ia1.image=[UIImageimageNamed:@"ts_bg01.png"];
cellView.backgroundView=ia1;

UIImageView*ia2=[[UIImageViewalloc]initWithFrame:CGRectMake(0,
0,280,170)];

ia2.image=[UIImageimageNamed:@"ts_bg02.png"];

cellView.selectedBackgroundView=ia2;

//行缩进
043
-(NSInteger)tableView:(UITableView
*)tableViewindentationLevelForRowAtIndexPath:(NSIndexPath*)indexPath{
044
NSUInteger
row=[indexPathrow];
045
return
row;
046
}
//定位
056
[TopicsTable
setContentOffset:CGPointMake(0,promiseNum*44+Chapter*20)];
057
058
059
//返回当前所选cell
060
NSIndexPath
*ip=[NSIndexPathindexPathForRow:rowinSection:section];
061
[TopicsTable
selectRowAtIndexPath:ipanimated:YESscrollPosition:UITableViewScrollPositionNone];
062
063
064
//右侧添加一个索引表
099
-
(NSArray*)sectionIndexTitlesForTableView:(UITableView*)tableView{
100
}
101
102
//返回Section标题内容
103
-
(NSString*)tableView:(UITableView*)tableViewtitleForHeaderInSection:(NSInteger)section{
104
}
105
106
//自定义划动时del按钮内容
107
-
(NSString*)tableView:(UITableView*)tableView
108
titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath
*)indexPath
109
110
111
//跳到指的row
orsection
112
[tableView
scrollToRowAtIndexPath:[NSIndexPathindexPathForRow:0inSection:0]atScrollPosition:UITableViewScrollPositionBottomanimated:NO];
//改变换行线颜色
53
54
tableView.separatorColor
=[UIColorblueColor];
UITableViewController默认的会在viewWillAppear的时候,清空所有选中cell,我们可以通过设置self.clearsSelectionOnViewWillAppear
=NO,来禁用该功能,并在viewDidAppear中调用UIScrollView的flashScrollIndicators方法让滚动条闪动一次,从而提示用户该控件是可以滑动的。

可以通过cell的selectionStyle属性指定cell选中时的显示风格,以及通过accessoryType来指定cell右边的显示的内容,或者直接指定accessoryView来定制右边显示的view。

注意:添加的subView都最好设置为不透明的,因为如果subView是半透明的话,view图层的叠加将会花费一定的时间,这会严重影响到效率。同时如果每个cell上面添加的subVi把opaque属性设置成YES的时候,滑动会比之前流畅一些。

从UITableViewCell中派生一个类,可以更深度的定制一个cell,可以指定cell在进入edit模式的时候如何相应等等。最简单的实现方式就是将所有要绘制的内容放到一个定制的subView中,并且重载该subView的drawRect方法直接把要显示的内容绘制出来(这样可以避免subView过多导致的性能瓶颈),最后再将该subView添加到cell派生类中的contentView中即可。但是这样定制的cell需要注意在数据改变的时候,通过手动调用该subView的setNeedDisplay方法来刷新界面------subView最好还是添加到cell的contentView中(跟编辑状态改变有关)。

2,UITableView提供了一个批量操作的特性,这个功能在一次进行多个row或者scetion的删除,插入,获取更新多个cell内容的时候特别好用。所有的批量操作需要包含在beginUpdates和endUpdates块中,否则会出现异常

3,IndexList

  当我们tableView中section有很多,数据量比较大的时候我们可以引入indexList,来方便完成section的定位,例如系统的通讯录程序。我们可以通过设置tableView的sectionIndexMinimumDisplayRowCount属性来指定当tableView中多少行的时候开始显示IndexList,默认的设置是NSIntegerMax,即默认是不显示indexList的。

  为了能够使用indexlist我们还需要实现dataSource中一下两个方法:

-(NSArray*)sectionIndexTitlesForTableView:(UITableView*)tableView;
-(NSInteger)tableView:(UITableView*)tableViewsectionForSectionIndexTitle:(NSString*)titleatIndex:(NSInteger)index;


  第一个方法返回用于显示在indexList中的内容的数组,通常为A,B,C...Z。第二个方法的主要作用是根据用户在indexList中点击的位置,返回相应的section的index值。这个例子可以在苹果官方给出的TableViewSuite中找到,实现起来还是很简单的。

4,如何提高tableView的性能

  a、重用cell

  我们都知道申请内存是需要时间,特别是在一段时间内频繁的申请内存将会造成很大的开销,而且上tebleView中cell大部分情况下布局都是一样的,这个时候我们可以通过回收重用机制来提高性能。

  b、避免content的重新布局

  尽量避免在重用cell时候,对cell的重新布局,一般情况在在创建cell的时候就将cell布局好。

  c、使用不透明的subView

  在定制cell的时候,将要添加的subView设置成不透明的会大大减少多个view层叠加时渲染所需要的时间。

  d、如果方便,直接重载subView的drawRect方法

  如果定制cell的过程中需要多个小的元素的话,最好直接对要显示的多个项目进行绘制,而不是采用添加多个subView。

  e、tableView的delegate的方法如非必要,尽量不要实现

  tableView的delegate中的很多函数提供了对cell属性的进一步控制,比如每个cell的高度,cell是否可以编辑,支持的edit风格等,如非必要最好不要实现这些方法因为快速的调用这些方法也会影响性能。

其他:http://www.keakon.net/2011/08/03/%E4%BC%98%E5%8C%96UITableView%E6%80%A7%E8%83%BD

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: