第一步引入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(, height*(KPadding+KImageHeight), width, height*KTitleHeight);
} -(CGRect )imageRectForContentRect:(CGRect)contentRect{
int width =contentRect.size.width;
int height=contentRect.size.height;
return CGRectMake(, 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=; 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=; 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>= &&tag<KCount) {
child.bounds=CGRectMake(, , 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 ;
} -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
int count=self.aData.count/KCount;
if (!self.aData.count%KCount==) {
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 ;
} @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(, , , ));
//二级导航
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];

}

IOS中UITableview中封装九宫格的更多相关文章

  1. iOS之UITableView中的cell因为重用机制导致新的cell的数据出现重复或者错乱

      UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚 ...

  2. iOS解决UITableView中Cell重用带来的问题

    tableView的常规配置,当超出一屏的cell就会标上可重用的标识出列到可重用缓存池中,后面再根据可重用标识来到的可重的cell就会和前面显示同样内容. - (UITableViewCell *) ...

  3. ios 自定义UITableView中分组的标题sectionview

    //Section的标题栏高度 -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)sec ...

  4. ios 更改UITableview中Section的字体颜色

    -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UILabel *c ...

  5. iOS设置UITableView中Cell被默认选中后怎么触发didselect事件

    //默认选中某个cell [self.searchResultTV selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] a ...

  6. ios中封装九宫格的使用(二级导航)

    效果图 一般用于导航功能 第一步下载http://pan.baidu.com/share/link?shareid=1824940819&uk=923776187 第二步 把下图内容放在你的x ...

  7. iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)

    iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...

  8. IOS开发中UITableView(表视图)的滚动优化及自定义Cell

    IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITable ...

  9. ios UITableView中Cell重用机制导致内容重复解决方法

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...

随机推荐

  1. Asp.net WebAPi Restful 的实现和跨域

    现在实际开发中用webapi来实现Restful接口开发很多,我们项目组前一段时间也在用这东西,发现大家用的还是不那么顺畅,所以这里写一个Demo给大家讲解一下,我的出发点不是如何实现,而是为什么? ...

  2. Windows server 2008 SSD性能测试

    过渡到windows 7.windows8是趋势,老迈的windows xp .windows server 2003已经快到淘汰的阶段,安装了windows server 2008 R2 ,测试了下 ...

  3. gradlew 命令行 build 调试 构建错误 Manifest merger failed MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. layer.tips定义弹出的宽度

    layer.tips('xxx', '.onlinetest', { tips: [1, '#3595CC'], area: ['500px', 'auto'], time: 4000 });

  5. Kudu-java数据库简单操作

    参考官网:http://kudu.apache.org/docs/kudu_impala_integration.html 参考:https://my.oschina.net/weiqingbin/b ...

  6. 使用tensorflow的lstm网络进行时间序列预测

    https://blog.csdn.net/flying_sfeng/article/details/78852816 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  7. Eclipse里选一个变量后,这个类里的该变量不变色了

    使用“Alt+Shift+O”对该提示功能的开/关切换

  8. ssh tunnel

    https://peppoj.net/2012/10/tunnel-http-traffic-encrypted-using-polipo-and-ssh/ --------------------- ...

  9. docker swarm join如何获取token

    在运行docker swarm join的时候需要一个token参数,如何知道这个参数那? [答案] Join as a worker node To retrieve the join comman ...

  10. Android 演示 ViewPager

    本文内容 环境 项目结构 演示 1:PagerTitleStrip 演示 2:PagerTabStrip 演示 3:ViewPager 和动态 Fragment 下载 Demo 环境 Windows ...