IOS中UITableview中封装九宫格

第一步引入SecondNav目录即可

 

第二步引入头文件 

#import "DIYTableView.h"

#import "invoiceInfo.h"

实现协议

DIYButtonDelegate

- (void)viewDidLoad
{
    [super viewDidLoad];

   NSMutableArray *mydata=[NSMutableArrayarray];

 
  

    NSString *path=[[NSBundlemainBundle] pathForResource:@"Pad_menu_level"ofType:@"json"];

 
  

    NSError * error=nil;

 
  

    NSString *content=[NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:&error];

 
  

    if (error) {

 
  

        NSLog(@"读取%@错误",path);

 
  

        return;

 
  

    }

 
  

    

 
  

    NSArray *ContentArrary=[content JSONValue];

 
  

    for (NSDictionary *dic in ContentArrary) {

 
  

        InvoiceInfo *info=[InvoiceInfoInvoice:dic];

 
  

        [mydata addObject:info];

 
  

    }

 
  

    CGFloat h=tpRec.size.height-KBottom;

 
  

    CGRectDivide(tpRec, &imgRec, &tpRec, h, CGRectMinYEdge);

 
  

    

 
  

 

 
  

    CGRect navRect=UIEdgeInsetsInsetRect(imgRec, UIEdgeInsetsMake(5, 5, 5, 5));

 
  

    //二级导航

 
  

    DIYTableView *NavSecond=[[DIYTableViewalloc] initWithFrame:navRect delegate:self];

 
  

    [self.view addSubview: NavSecond];

 
  

    NavSecond.aData=mydata;

 
  

    [NavSecond release];


    

}

//实现代理方法
-(void)DiyButtonClick:(DIYButton *) btn{
    NSLog(@"title-->%@",btn.titleLabel.text);
}

下载地址 http://pan.baidu.com/share/link?shareid=1824940819&uk=923776187

以下参照代码

封装model

#import <Foundation/Foundation.h>

@interface InvoiceInfo : NSObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *imagUrl;
@property(nonatomic,copy)NSString *iPad_ctrls;

+(id)Invoice:(NSDictionary *)info;
@end



#import "InvoiceInfo.h"

@implementation InvoiceInfo
+(id)Invoice:(NSDictionary *)info{
    InvoiceInfo *invoice=[[[InvoiceInfo alloc] init] autorelease];
    invoice.name=info[@"name"];
    invoice.imagUrl=info[@"iPad_image"];
    invoice.iPad_ctrls=info[@"iPad_ctrls"];
    return invoice;
}

- (void)dealloc
{
    [_name release];
    [_imagUrl release];
    [_iPad_ctrls release];
    [super dealloc];
}

@end

 

自定义button

#import <UIKit/UIKit.h>
#define KFont 15

@interface DIYButton : UIButton


@property(nonatomic,copy)NSString *ctrlName;
@end


#import "DIYButton.h"
#define KImageHeight 0.6
#define KPadding 0.1
#define KTitleHeight (1-KImageHeight-2*KPadding)

@implementation DIYButton

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        //设置文字
        [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        self.titleLabel.textAlignment=NSTextAlignmentCenter;
        self.titleLabel.font=[UIFont systemFontOfSize:KFont];
        //设置图片
        self.imageView.contentMode=UIViewContentModeScaleAspectFit;
        self.adjustsImageWhenHighlighted=NO;
    }
    return self;
}

-(CGRect)titleRectForContentRect:(CGRect)contentRect{
    int width =contentRect.size.width;
    int height=contentRect.size.height;
    return CGRectMake(0, height*(KPadding+KImageHeight), width, height*KTitleHeight);
}

-(CGRect )imageRectForContentRect:(CGRect)contentRect{
    int width =contentRect.size.width;
    int height=contentRect.size.height;
    return CGRectMake(0, height*KPadding, width, height*KImageHeight);

}

- (void)dealloc
{
    [_ctrlName release];
    [super dealloc];
}


@en

自定义cell

#import <UIKit/UIKit.h>
#import "InvoiceInfo.h"
#import "DIYButton.h"
#define KCount 8
#define KHeight 100
#define KMinTag 10


@protocol DIYButtonDelegate;

@interface DIYCell : UITableViewCell
@property(nonatomic,retain)NSArray *data;
@property(nonatomic,assign)id<DIYButtonDelegate> diyDelegate;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;

@end

@protocol DIYButtonDelegate <NSObject>

-(void)DiyButtonClick:(DIYButton *) btn;

@end

#import "DIYCell.h"

#define KPadding 25

@implementation DIYCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        for (int i=0; i<KCount; i++) {
            DIYButton *btn=[[DIYButton alloc] initWithFrame:CGRectZero];
            btn.tag=KMinTag+i;
            [self.contentView addSubview:btn];
            [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
        }
    }
    return self;
}

-(void)click:(DIYButton *)btn{
    if (self.diyDelegate &&[self.diyDelegate respondsToSelector:@selector(DiyButtonClick:)]) {
        [self.diyDelegate DiyButtonClick:btn];
    }
}

-(void)setData:(NSArray *)data{
    if (_data!=data) {
        [_data release];
        _data=[data retain];
        int count =self.data.count;
        for (int i=0; i<KCount; i++) {
            DIYButton *btn=(DIYButton *)[self.contentView viewWithTag:(i+KMinTag)];
            if (i<count) {
                btn.hidden=NO;
                InvoiceInfo *sp=data[i];
                [btn setTitle:sp.name forState:UIControlStateNormal];
                [btn setImage:[UIImage imageNamed:sp.imagUrl] forState:UIControlStateNormal];
                btn.ctrlName=sp.iPad_ctrls;
            }
            else{
                btn.hidden=YES;
            }
        }
    }
}

-(void)layoutSubviews{
    [super layoutSubviews];

    
    
    int  width=self.contentView.bounds.size.width/KCount;
    CGFloat height=self.contentView.bounds.size.height;
    //button事件宽度
    CGFloat btnWidth=width-KPadding;
    CGFloat btnheight=height-KPadding;
     CGFloat centWidth=width*0.5f;
    for (UIView *child in self.contentView.subviews) {
        if ([child isKindOfClass:[UIButton class]]) {
            int tag=child.tag-KMinTag;
            if (tag>=0 &&tag<KCount) {
                child.bounds=CGRectMake(0, 0, btnWidth, btnheight);
    
                child.center=CGPointMake(tag*width+ centWidth, height*0.5f);//这一步很关键, 先平分cell的宽度,让后button在剧中
                
            }
        }
    }
}



@end

封装tableview

#import <UIKit/UIKit.h>
#import "DIYCell.h"

@interface DIYTableView : UIView<UITableViewDataSource,UITableViewDelegate>
@property(nonatomic,readonly)UITableView *tableview;
@property(nonatomic,retain)NSMutableArray *aData;
@property(nonatomic,assign)id tableDelegate;
- (id)initWithFrame:(CGRect)frame delegate:(id)adelegate;
@end

#import "DIYTableView.h"
#import "DIYCell.h"

@implementation DIYTableView

- (id)initWithFrame:(CGRect)frame delegate:(id)adelegate;
{
    self = [super initWithFrame:frame];
    if (self) {
        _tableview=[[UITableView alloc] initWithFrame:self.bounds style:UITableViewStylePlain];
        [self addSubview:_tableview];
        _tableview.separatorStyle=UITableViewCellSeparatorStyleNone;
        _tableview.backgroundColor=[UIColor clearColor];
        
        _tableview.delegate=self;
        _tableview.dataSource=self;
        self.tableDelegate=adelegate;
        [_tableview release];
    }
    return self;
}


#pragma mark -tableview data source
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    int count=self.aData.count/KCount;
    if (!self.aData.count%KCount==0) {
        count++;
    }
    return count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellIdentiry=@"DIYTableView";
    DIYCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentiry];
    if (cell==nil) {
        cell=[[[DIYCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentiry] autorelease];
    }
    cell.diyDelegate=self.tableDelegate;
    
    // 设置cell的背景色
    UIView *bg = [[[UIView alloc] init] autorelease];
    bg.backgroundColor=[UIColor whiteColor];
    cell.backgroundView = bg;
    
    // 选中的背景
    UIView *selectdBg = [[[UIView alloc] init] autorelease];
    selectdBg.backgroundColor = [UIColor whiteColor];
    cell.selectedBackgroundView = selectdBg;
   
   //起始数据
    int location=indexPath.row*KCount;
    int length=KCount;
    if (location+length>self.aData.count) {
        length=self.aData.count-location;
    }
    NSArray *temparr=[self.aData subarrayWithRange:NSMakeRange(location, length)];
    cell.data=temparr;
    return cell;
}

#pragma mark -tableview delegate
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 100;
}



@end

viewcontroller用法 必须实现

DIYButtonDelegate协议

   NSMutableArray *mydata=[NSMutableArray array];
    NSString *path=[[NSBundle mainBundle] pathForResource:@"Pad_menu_level" ofType:@"json"];
    NSError * error=nil;
    NSString *content=[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    if (error) {
        NSLog(@"读取%@错误",path);
        return;
    }
    
    NSArray *ContentArrary=[content JSONValue];
    for (NSDictionary *dic in ContentArrary) {
        InvoiceInfo *info=[InvoiceInfo Invoice:dic];
        [mydata addObject:info];
    }
    CGFloat h=tpRec.size.height-KBottom;
    CGRectDivide(tpRec, &imgRec, &tpRec, h, CGRectMinYEdge);
    

    CGRect navRect=UIEdgeInsetsInsetRect(imgRec, UIEdgeInsetsMake(5, 5, 5, 5));
    //二级导航
    DIYTableView *NavSecond=[[DIYTableView alloc] initWithFrame:navRect delegate:self];
    [self.view addSubview: NavSecond];
    NavSecond.aData=mydata;
    [NavSecond release];

 

-(void)DiyButtonClick:(DIYButton *) btn{

    NSLog(@"第二导航__%@__%@",btn.titleLabel.text,btn.ctrlName);

    [selfpushNavVc:btn.ctrlName];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值