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(, 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中封装九宫格的更多相关文章
- iOS之UITableView中的cell因为重用机制导致新的cell的数据出现重复或者错乱
UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚 ...
- iOS解决UITableView中Cell重用带来的问题
tableView的常规配置,当超出一屏的cell就会标上可重用的标识出列到可重用缓存池中,后面再根据可重用标识来到的可重的cell就会和前面显示同样内容. - (UITableViewCell *) ...
- ios 自定义UITableView中分组的标题sectionview
//Section的标题栏高度 -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)sec ...
- ios 更改UITableview中Section的字体颜色
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UILabel *c ...
- iOS设置UITableView中Cell被默认选中后怎么触发didselect事件
//默认选中某个cell [self.searchResultTV selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] a ...
- ios中封装九宫格的使用(二级导航)
效果图 一般用于导航功能 第一步下载http://pan.baidu.com/share/link?shareid=1824940819&uk=923776187 第二步 把下图内容放在你的x ...
- iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)
iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...
- IOS开发中UITableView(表视图)的滚动优化及自定义Cell
IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITable ...
- ios UITableView中Cell重用机制导致内容重复解决方法
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...
随机推荐
- Asp.net WebAPi Restful 的实现和跨域
现在实际开发中用webapi来实现Restful接口开发很多,我们项目组前一段时间也在用这东西,发现大家用的还是不那么顺畅,所以这里写一个Demo给大家讲解一下,我的出发点不是如何实现,而是为什么? ...
- Windows server 2008 SSD性能测试
过渡到windows 7.windows8是趋势,老迈的windows xp .windows server 2003已经快到淘汰的阶段,安装了windows server 2008 R2 ,测试了下 ...
- gradlew 命令行 build 调试 构建错误 Manifest merger failed MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- layer.tips定义弹出的宽度
layer.tips('xxx', '.onlinetest', { tips: [1, '#3595CC'], area: ['500px', 'auto'], time: 4000 });
- Kudu-java数据库简单操作
参考官网:http://kudu.apache.org/docs/kudu_impala_integration.html 参考:https://my.oschina.net/weiqingbin/b ...
- 使用tensorflow的lstm网络进行时间序列预测
https://blog.csdn.net/flying_sfeng/article/details/78852816 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...
- Eclipse里选一个变量后,这个类里的该变量不变色了
使用“Alt+Shift+O”对该提示功能的开/关切换
- ssh tunnel
https://peppoj.net/2012/10/tunnel-http-traffic-encrypted-using-polipo-and-ssh/ --------------------- ...
- docker swarm join如何获取token
在运行docker swarm join的时候需要一个token参数,如何知道这个参数那? [答案] Join as a worker node To retrieve the join comman ...
- Android 演示 ViewPager
本文内容 环境 项目结构 演示 1:PagerTitleStrip 演示 2:PagerTabStrip 演示 3:ViewPager 和动态 Fragment 下载 Demo 环境 Windows ...