第一步引入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];
}