• 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];

    }

  • 相关阅读:
    素数路径Prime Path POJ3126 素数,BFS
    Fliptile POJ3279 DFS
    Find the Multiple POJ1426
    洗牌Shuffle'm Up POJ3087 模拟
    棋盘问题 POJ1321 DFS
    抓住那只牛!Catch That Cow POJ3278 BFS
    Dungeon Master POJ2251 三维BFS
    Splitting into digits CodeForce#1104A
    Ubuntu下手动安装Nvidia显卡驱动
    最大连续子序列和
  • 原文地址:https://www.cnblogs.com/gcb999/p/3240543.html
Copyright © 2020-2023  润新知