欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

类似九宫格的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,从项目中抽了出来

相关标签: UI