zoukankan      html  css  js  c++  java
  • 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];

    }

  • 相关阅读:
    编码的道与禅
    使用 C# 编写简易 ASP.NET Web 服务器
    程序员的职业素养
    NServiceBus官方文档翻译(二)NServiceBus 入门
    NServiceBus官方文档翻译(一)NServiceBus 概况
    七周七语言之使用prolog解决爱因斯坦斑马难题
    七周七语言之用Io编写领域特定语言
    七周七语言之用ruby做点什么
    利用binarySearch实现抽奖计算逻辑
    Java设计模式三
  • 原文地址:https://www.cnblogs.com/gcb999/p/3240543.html
Copyright © 2011-2022 走看看