类似九宫格的tableViewCell
程序员文章站
2022-03-04 13:47:39
...
晚年也过了,新的一年真正来临了,迎着太阳向着远方,来冒个泡
之前看到有花香太奇的九宫格,纯button实现的,感觉table更好用,就写了tableviewcell的,不是很难,主要还是view多了,怎么区分的问题,先上代码吧
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
int row=indexPath.row;
NSString *[email protected]"cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:indentifier];
if(cell==nil){
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier];
int width=(1024-320-itemNumPerRow*10)/itemNumPerRow;
for(int i=0;i<itemNumPerRow;i++){
MediaView *itemView=[[MediaView alloc] initWithFrame:CGRectMake(i*width+10, 0, width, RowHeight)];
itemView.backgroundColor=[UIColor clearColor];
itemView.delegate=self;
[itemView setTag:i+1];
itemView.mediaTag=row*itemNumPerRow+i+1;
itemView.mediaImage=[UIImage imageNamed:@"aaa.png"];
[cell.contentView addSubview:itemView];
}
}
else{
for(int i=0;i<itemNumPerRow;i++){
MediaView *itemView=(MediaView *)[cell.contentView viewWithTag:i+1];
itemView.mediaTag=row*itemNumPerRow+i+1;
itemView.mediaImage=[UIImage imageNamed:@"aaa.png"];
}
}
cell.selectionStyle=UITableViewCellSelectionStyleNone;
return cell;
}
MediaView是自定义的view,重写了一下draw函数,复杂的话还可以加入响应的按钮和delegate之类的
#import <UIKit/UIKit.h>
#define MarginLeft 10
#define MarginRight 10
#define MarginTop 10
#define MarginBottom 35
@interface MediaView : UIView {
UIImage *mediaImage;
int mediaTag;
}
@property int mediaTag;
#import "MediaView.h"
@implementation MediaView
- (void)drawRect:(CGRect)rect {
// Drawing code.
int imageWidth=self.frame.size.width-MarginLeft-MarginRight;
int imageHeight=self.frame.size.height-MarginTop-MarginBottom;
CGRect imageRect=CGRectMake(MarginLeft, MarginTop, imageWidth, imageHeight);
[self.mediaImage drawInRect:imageRect];
CGRect textRect=CGRectMake(MarginLeft, self.frame.size.height-MarginBottom, imageWidth, MarginBottom);
[[UIColor blueColor] set];
[@"test" drawInRect:textRect withFont:[UIFont systemFontOfSize:15]];
}
我一直习惯用if--else来填充cell,if里面初始化各种view的UI,并且设置相对固定的tag,else里面根据tag找到重用的控件,动态填充数据,动态的部分是用mediaTag来实现的
PS:有人问过有木有demo,从项目中抽了出来
推荐阅读
-
微信朋友圈心形配图怎么弄 在微信朋友圈发爱心九宫格图片的方法
-
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
-
SqlServer实现类似Oracle的before触发器示例
-
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
-
深入解析iOS应用开发中九宫格视图布局的相关计算方法
-
Eclipse怎么自定义类似syso的快捷代码模板?
-
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
-
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
-
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
-
ThinkPHP类似AOP思想的参数验证的实现方法