#import
#import
@interface NineGridEntity : NSObject
@property (nonatomic, strong) NSString* id;
@property (nonatomic, strong) NSString* name;
@property (nonatomic, strong) NSString* ImageName;
@property (nonatomic, strong) UIImage* icon;
@property (nonatomic, strong) NSString * unreadcount;
@property (nonatomic) int sortno;
@property (nonatomic, strong)UIImageView *iconIV;
@end
#import "NineGridEntity.h"
@implementation NineGridEntity
//@synthesize id,name,icon,sortno,unreadcount,ImageName,iconIV;
@end
#import
@protocol NineGridTableDelegate
-(void)onClickNineGridTableButt on:(NSString*)objid;
@end
@interface NineGridTable : UITableView
-(void)loadGridData:(NSMutableArray*)dataArray;
@property (nonatomic, assign)
id
nineGridTableDelegate;
@property (nonatomic, assign) int countinrow;
//设置表格单元格样式
+(void)setTableCellStyle:(UITableViewCell*)cell;
@end
#import "NineGridTable.h"
#import "NineGridEntity.h"
#import "UIImage+imageAlpha.h"
@interface NineGridTable(){
NSMutableArray* dataArrays;
}
@end
@implementation NineGridTable
@synthesize nineGridTableDelegate;
@synthesize countinrow;
- (id)initWithFrame:(CGRect)frame
{
self =
[super initWithFrame:frame];
if (self)
{
// Initialization code
}
self.backgroundColor = [UIColor whiteColor];
self.allowsSelection = FALSE;
self.dataSource = self;
self.delegate = self;
[self
setSeparatorColor:[UIColor clearColor]];
self.countinrow = 3;
return
self;
}
-(void)loadGridData:(NSMutableArray*)dataArray{
dataArrays =
[[NSMutableArray alloc] initWithArray:dataArray];
[self
reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return
dataArrays.count % self.countinrow >0 ? dataArrays.count /
self.countinrow + 1 : dataArrays.count / self.countinrow;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString
*ListViewCellId = @"NineGridCellId";
CGFloat
buttonheight = tableView.frame.size.width / (self.countinrow +
4.0f);
CGFloat
buttonwidth = buttonheight;
UITableViewCell *cell = [tableView
dequeueReusableCellWithI dentifier:ListViewCellId];
if (cell ==
nil) {
cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefa ult
reuseIdentifier:ListViewCellId];
CGFloat sidewidth = (tableView.frame.size.width -
buttonheight*self.countinrow) / (self.countinrow + 1.0f);
CGFloat sideheight = (tableView.frame.size.width / self.countinrow
-buttonheight) / 2.0f;
for(int i=0; i
UIButton* button1 = [UIButton
buttonWithType:UIButtonTypeCustom];
button1.frame = CGRectMake(sidewidth * (i+1) + buttonwidth*i,
sideheight, buttonwidth, buttonheight);
button1.backgroundColor = [UIColor whiteColor];
button1.tag = 1001 + i;
[cell.contentView addSubview:button1];
[button1 addTarget:self action:@selector(buttonClickImage:)
forControlEvents:UIControlEventTouchUpIns ide];
}
for(int i=0; i
UIButton* button1 = (UIButton*)[cell.contentView
viewWithTag:(1001+i)];
UILabel* label1 = [[UILabel alloc]
initWithFrame:CGRectMake(button1.frame.origin.x-15,
button1.frame.origin.y+button1.frame.size.height,
button1.frame.size.width+30, 20.0f)];
label1.backgroundColor = [UIColor clearColor];
label1.textColor = [UIColor blackColor];
label1.font = [UIFont fontWithName:@"HelveticaNeue-Light"
size:14];
label1.tag = 2001 + i;
label1.textAlignment = NSTextAlignmentCenter;
[cell.contentView addSubview:label1];
}
CGFloat unreadheight = 19.0f;
CGFloat cornerRadius = 10.0f;
CGFloat offsetunread = 2.0f;
CGFloat alphaunreawd = 0.8f;
for(int i=0; i
UIButton* button1 = (UIButton*)[cell.contentView
viewWithTag:(1001+i)];
UILabel* labelunread1 = [[UILabel alloc]
initWithFrame:CGRectMake(0.0f,0.0f,unreadheight,unreadheight)];
labelunread1.center =
CGPointMake(button1.frame.origin.x+button1.frame.size.width-offsetunread,
button1.frame.origin.y+offsetunread);
labelunread1.backgroundColor = [UIColor colorWithRed:1.0f
green:0.0f blue:0.0f alpha:alphaunreawd];
labelunread1.textColor = [UIColor whiteColor];
labelunread1.font = [UIFont fontWithName:@"HelveticaNeue-Light"
size:13];
labelunread1.tag = 3001 + i;
labelunread1.textAlignment = NSTextAlignmentCenter;
[cell.contentView addSubview:labelunread1];
[labelunread1.layer setCornerRadius:cornerRadius];
[labelunread1.layer setMasksToBounds:YES];
}
}
cell.backgroundColor = [UIColor clearColor];
cell.contentView.tag = indexPath.row;
for(int i=0;
i
UIButton* button1 = (UIButton*)[cell.contentView
viewWithTag:(1001+i)];
UILabel* label1 = (UILabel*)[cell.contentView
viewWithTag:(2001+i)];
UILabel* imgView1 = (UILabel*)[cell.contentView
viewWithTag:(3001+i)];
button1.hidden = YES;
label1.hidden = YES;
imgView1.hidden = YES;
}
int index =
0;
for(NSInteger i= indexPath.row*(self.countinrow); (i<
indexPath.row*(self.countinrow) + self.countinrow) &&
i
UIButton* button1 = (UIButton*)[cell.contentView
viewWithTag:(1001+index)];
UILabel* label1 = (UILabel*)[cell.contentView
viewWithTag:(2001+index)];
UILabel* imgView1 = (UILabel*)[cell.contentView
viewWithTag:(3001+index)];
NineGridEntity* entity = dataArrays[i];
button1.hidden = NO;
label1.hidden = NO;
//找到保存图片的保存路径,并用文件处理单例找到图片的名称,查找本地解压过的图片文件对应的名称进行对九宫格图标的填充。如果没有文件则选择用本地保存好的默认的图片。
NSString* homePath=NSHomeDirectory();
NSString* BtnImageSetPath = [homePath
stringByAppendingPathCom ponent:@"%@/ResoftR/ResoftRV3-3.02ForIos8/ResoftGPS/NineGridTable"];
NSFileManager* file=[NSFileManager defaultManager];
if ([file fileExistsAtPath:BtnImageSetPath])
{
[button1 setImage:[UIImage imageWithContentsOfFile:[BtnImageSetPath
stringByAppendingPathCom ponent:[NSString
stringWithFormat:@"%@.png",entity.ImageName]]]
forState:UIControlStateNormal];
//
//
//
[button1 setBackgroundImage:[UIImage
imageWithContentsOfFile:[BtnImageSetPath
stringByAppendingPathCom ponent:[NSString
stringWithFormat:@"%@.png",entity.ImageName]]]
forState:UIControlStateNormal];
//增加了九宫格界面的点击效果,如果已经下载了九宫格图片解压并填充成功后,则直接在在此填充方法中增加点击效果事件,当点击对应按钮手指弹起的时候显示效果。
//
测试点:
//
1、验证点击九宫格页面图片时,是否会有阴影效果。
//
2、验证点击后是否会跳转至响应的页面且页面标题与图标显示的标题一致
//
3、在测试过程中对有无卡死、闪退以及页面显示不全的状态进行验证
//
//
*/
//
[button1 setShowsTouchWhenHighlig hted:YES];
}
else
{
[button1 setImage:entity.icon forState:UIControlStateNormal];
//
[button1 setBackgroundImage:entity.icon
forState:UIControlStateNormal];
//
[button1 setBackgroundImage:entity.icon
forState:UIControlStateHighlighte d];
//
button1.backgroundColor = [UIColor redColor];
//
//
[button1 setShowsTouchWhenHighlig hted:YES];
}
[button1 setImage:entity.icon forState:UIControlStateNormal];
//
[button1 setBackgroundImage:[UIImage sourceImage:entity.icon
applyingAlpha:1.0] forState:UIControlStateHighlighte d];
label1.text = entity.name;
if ([entity.unreadcount integerValue] > 0) {
imgView1.hidden = NO;
imgView1.text = [NSString stringWithFormat:@"%@",
entity.unreadcount];
if ([entity.unreadcount integerValue] > 99) {
int x = (int)[NSString stringWithFormat:@"%@",
entity.unreadcount].length;
NSMutableString* stlen = [[NSMutableString alloc] init];
for (int i = 0; i < x; i++) {
[stlen appendString:@"9"];
}
if (stlen.length < 2) {
stlen = [[NSMutableString alloc] initWithString:@"99"];
}
CGFloat contentWidth = [stlen
boundingRectWithSize:CGSizeMake(CGFLOAT_MAX,
imgView1.frame.size.height)
options:NSStringDrawingUsesLineF ragmentOrigin|NSStringDrawingUsesFontL eading
attributes:[NSDictionary dictionaryWithObjectsAnd Keys:[UIFont
systemFontOfSize:13],NSFontAttributeName, nil]
context:nil].size.width;
imgView1.frame =
CGRectMake(imgView1.frame.origin.x-(contentWidth-imgView1.frame.size.width),imgView1.frame.origin.y,contentWidth,imgView1.frame.size.height);
} else {
CGFloat offsetunread = 2.0f;
imgView1.frame =
CGRectMake(0,0,imgView1.frame.size.height,imgView1.frame.size.height);
imgView1.center =
CGPointMake(button1.frame.origin.x+button1.frame.size.width-offsetunread,
button1.frame.origin.y+offsetunread);
}
}
else{
imgView1.hidden = YES;
}
index ++;
}
[NineGridTable setTableCellStyle:cell];
return
cell;
}
//设置表格单元格样式
+(void)setTableCellStyle:(UITableViewCell*)cell{
if ([cell
respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell
respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsMake(0,0,0,0)];
}
}
-(void)buttonClickImage:(UIButton*)button{
NSInteger
index = (button.tag - 1001) +
button.superview.tag*(self.countinrow);
NineGridEntity* entity = dataArrays[index];
if
(self.nineGridTableDelegate && [self.nineGridTableDelegate
respondsToSelector:@selector(onClickNineGridTableButt on:)]){
[nineGridTableDelegate
onClickNineGridTableButt on:entity.name];
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return
tableView.frame.size.width / (self.countinrow);
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView
deselectRowAtIndexPath:indexPath animated:NO];
}
@end
注意:要引入图片的路径,2.就是导入SDWebImage框架.
#import
@interface NineGridEntity : NSObject
@property (nonatomic, strong) NSString* id;
@property (nonatomic, strong) NSString* name;
@property (nonatomic, strong) NSString* ImageName;
@property (nonatomic, strong) UIImage* icon;
@property (nonatomic, strong) NSString * unreadcount;
@property (nonatomic) int sortno;
@property (nonatomic, strong)UIImageView *iconIV;
@end
#import "NineGridEntity.h"
@implementation NineGridEntity
//@synthesize id,name,icon,sortno,unreadcount,ImageName,iconIV;
@end
#import
@protocol NineGridTableDelegate
-(void)onClickNineGridTableButt
@end
@interface NineGridTable : UITableView
-(void)loadGridData:(NSMutableArray*)dataArray;
@property (nonatomic, assign)
@property (nonatomic, assign) int countinrow;
//设置表格单元格样式
+(void)setTableCellStyle:(UITableViewCell*)cell;
@end
#import "NineGridTable.h"
#import "NineGridEntity.h"
#import "UIImage+imageAlpha.h"
@interface NineGridTable(){
}
@end
@implementation NineGridTable
@synthesize nineGridTableDelegate;
@synthesize countinrow;
- (id)initWithFrame:(CGRect)frame
{
}
-(void)loadGridData:(NSMutableArray*)dataArray{
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//找到保存图片的保存路径,并用文件处理单例找到图片的名称,查找本地解压过的图片文件对应的名称进行对九宫格图标的填充。如果没有文件则选择用本地保存好的默认的图片。
//
//
//
//增加了九宫格界面的点击效果,如果已经下载了九宫格图片解压并填充成功后,则直接在在此填充方法中增加点击效果事件,当点击对应按钮手指弹起的时候显示效果。
//
//
//
//
//
//
//
//
//
//
//
//
//
}
//设置表格单元格样式
+(void)setTableCellStyle:(UITableViewCell*)cell{
}
-(void)buttonClickImage:(UIButton*)button{
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
}
@end
注意:要引入图片的路径,2.就是导入SDWebImage框架.