(转自)http://www.devdiv.com/home.php?mod=space&uid=1&do=blog&id=2125
最近论坛上网友wxy1978125一直在问iphone中Grid问题,并且从网上下载了一个例子。
例子功能很强大,还可以滚动,唯一可惜的是数据只能放在一列上。
原理:
这里我来说说它的实现原理,其实并不复杂,简单的说就是多个view排列出来的。
最上面有是标题由vTopLeft/vTopRight这两个UIView组成
显示内容的由vLeftContent/vRightContent这两个UIView组成的。其中vLeftContent显示左边第一列,其他的内容都是放在第二列的,放在vRightContent。
如图所示,上边的深灰色的就是VTopLeft/vTopRight,左侧第一列显示数字的就是vLeftContent,而其他内容都是vRightContent显示的。
代码解释:
其中fillData函数中填充显示标题和内容列
for(int column = 0;column < [dataSource.titles count];column++){
..............................
if( 0 == column){
[vTopLeft addSubview:l];
}
这里是画标题栏("時限")
其他标题在这里画的
else{
[vTopRight addSubview:l];
columnOffset += columnWidth;
}
同样,填充内容列
for(int i = 0;i<[dataSource.data count];i++){
NSArray *rowData = [dataSource.data objectAtIndex:i];
columnOffset = 0.0;
for(int column=0;column<[rowData count];column++){
.............................
UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(columnOffset, i * cellHeight , columnWidth, cellHeight -1 )];
..............................
这里是填充第一列的内容
if( 0 == column){
l.frame = CGRectMake(columnOffset, i * cellHeight , columnWidth -1 , cellHeight -1 );
[vLeftContent addSubview:l];
}
第二列的内容在这里填充
else{
[vRightContent addSubview:l];
columnOffset += columnWidth;
}
我们可以看到实际上,它就是新创建一个UILabel用来放文本内容,然后把UILable作为vLeftContent/vRightContent这两个UIView的subView。
如何新增一列:
根据以上原理,对代码做了修改,增加了一列,效果图
由于原理并没有变,我只简单说说怎么增加一列,首先标题栏要增加一列,这时候vTopRight在屏幕中的位置注意要右移;同样增加了content列,命名为vLeftContentN1,也需要调整vRightContent位置;另外需要调整的就是fillData函数了,记得对column==1做特别处理;最后需要注意的是滚动事件的处理。
我就不废话做过多解释了,大家可以下载代码,搜索代码中所有以N1结尾的串,都是我新加的,你可以模仿着增加新列实现Grid。
代码下载地址:
http://www.devdiv.com/thread-32746-1-1.html
本文由Vincent (
[email protected])原创,转载请注明出处