//自定义button
#import <UIKit/UIKit.h> @interface CKButton : UIButton @end #import "CKButton.h"
#define KTitleWidth 0.6
#define KPadding 0.1
#define KImageWidth (1-KTitleWidth -2*KPadding) @implementation CKButton - (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
//设置image
self.adjustsImageWhenDisabled=NO;
self.adjustsImageWhenHighlighted=NO;
self.imageView.contentMode=UIViewContentModeScaleAspectFit;
//设置title
[self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
}
return self;
} -(CGRect)imageRectForContentRect:(CGRect)contentRect{
CGFloat width=contentRect.size.width;
CGFloat height=contentRect.size.height;
return CGRectMake(, , width*KImageWidth, height); } -(CGRect)titleRectForContentRect:(CGRect)contentRect{
CGFloat width=contentRect.size.width;
CGFloat height=contentRect.size.height;
return CGRectMake(width*(KImageWidth+KPadding), , width*KTitleWidth, height);
} @end

自定义cell

#import "CkCell.h"
#define KMinTag 10 @interface CkCell ()
{
CKButton *_current;
}
@end @implementation CkCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) { for (int i=; i<KCount; i++) {
CKButton *button=[[CKButton alloc] initWithFrame:CGRectZero];
button.tag=KMinTag+i;
[self.contentView addSubview:button];
[button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
}
}
return self;
} -(void)setDatacell:(NSArray *)datacell{
if (_datacell!=datacell) {
[_datacell release];
_datacell=[datacell retain];
int count=self.datacell.count;
for (int i=; i<KCount; i++) {
CKButton *button=(CKButton *)[self.contentView viewWithTag:(KMinTag+i)];
if ((i<count)) {
button.hidden=NO;
NSString *temp=self.datacell[i];
[button setTitle:temp forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"radio_normal"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"radio_selected"] forState:UIControlStateSelected];
}
else{
button.hidden=YES;
}
}
}
} -(void)layoutSubviews{
[super layoutSubviews];
int width=self.contentView.bounds.size.width/KCount;
for (UIView *child in self.contentView.subviews) {
if ([child isKindOfClass:[UIButton class]]) {
int tag=child.tag-KMinTag;
if (tag>= && tag<KCount) {
child.frame=CGRectMake(tag*width, , width, KHeight);
}
}
}
} -(void)click:(CKButton *)btn{ btn.selected=!btn.selected; if (self.delegate ||[self.delegate respondsToSelector:@selector(CKCellCLick:)]) {
[self.delegate CKCellCLick:btn];
}
} - (void)dealloc
{ [_datacell release];
[super dealloc];
}
@end

封装tableview

#import <UIKit/UIKit.h>
#import "CkCell.h" @interface CKTableView : UIView<UITableViewDataSource,UITableViewDelegate>
@property(nonatomic,retain)NSArray *data;
@property(nonatomic,assign)id ckDelegate;
@end #import "CKTableView.h" @implementation CKTableView - (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UITableView *tableview=[[UITableView alloc] initWithFrame:self.bounds style:UITableViewStylePlain];
tableview.delegate=self;
tableview.dataSource=self;
tableview.separatorStyle=UITableViewCellSeparatorStyleNone;
[self addSubview:tableview];
[tableview release];
}
return self;
} -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return ;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ int count=self.data.count/KCount;
if (!self.data.count%KCount==) {
count++;
}
return count;
} -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentify=@"CKTableView";
CkCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentify];
if (cell==nil) {
cell=[[[CkCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentify] autorelease] ;//注意一定要在这里加aurorelease,否则会报错,原因不明
}
cell.delegate=self.ckDelegate; int location=indexPath.row*KCount;
int length=KCount;
if (location+length>self.data.count) {
length=self.data.count-location;
}
cell.datacell=[self.data subarrayWithRange:NSMakeRange(location, length)]; return cell ;
} - (void)dealloc
{
[_data release];
[super dealloc];
} @end

viewcontroller中用法

#import <UIKit/UIKit.h>
#import "CKTableView.h" @interface CkViewController : UIViewController<CKCellDelegate> @property(nonatomic,retain)NSMutableArray *selectArrary;
@end #import "CkViewController.h" @interface CkViewController () @end @implementation CkViewController - (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor=[UIColor whiteColor];
self.selectArrary=[NSMutableArray array];
NSArray *mydata=@[@"税收优惠",@"办税指南",@"最新政策",@"政策解读",@"热点问题",@"涉税通告",@"地税新闻"];
for (int i=; i<mydata.count; i++) {
[self.selectArrary addObject:@];
}
// Do any additional setup after loading the view.
CKTableView *tableview=[[CKTableView alloc] initWithFrame:CGRectMake(, , , )];
tableview.ckDelegate=self;
tableview.data=mydata;
[self.view addSubview:tableview];
[tableview release];
} -(void)CKCellCLick:(CKButton *)btn{
NSLog(@"__>%@",btn.titleLabel.text);
} @end

ios中自定义checkbox的更多相关文章

  1. [转]Android中自定义checkbox样式

    android中自定义checkbox的图片和大小   其实很简单,分三步: 1.在drawable中创建文件checkbox_selector.xml: <?xml version=" ...

  2. ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用

    做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...

  3. ios中自定义cell 设置cell的分组结构

    ios系统默认的cell并不能满足我们的需求 这个时候就需要自定义我们的cell 自定义cell为分组的时候 需要设置分组样式  以下是我常用分组的二种方法: 第一是 在自定义的UITableView ...

  4. iOS中 自定义cell分割线/分割线偏移 韩俊强的博客

    在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注 ...

  5. IOS开发自定义CheckBox控件

    IOS本身没有系统的CheckBox组件,但是实际开发中会经常用到,所以专门写了一个CheckBox控件,直接上代码 效果图: UICheckBoxButton.h文件如下: #import #imp ...

  6. Android中自定义Checkbox

    custom_checkbox.xml文件: <?xml version="1.0" encoding="utf-8"?> <selector ...

  7. ios中自定义图层的2种方法

    1:自定义图层,在图层中画图 #import <QuartzCore/QuartzCore.h> @interface MJLayer : CALayer @end #import &qu ...

  8. ios中自定义图层

    图层和VIEW的区别 1:view不具备显示功能,是因view内部有一个图层,才能显示出来 2:图层不具备事件功能,VIEW继承UIRespone具有处理事件功能 3:自定义的图层有一个影式动画,VI ...

  9. android中自定义checkbox的图片和大小

    其实很简单,分三步: 1.在drawable中创建文件checkbox_selector.xml: <?xml version="1.0" encoding="ut ...

随机推荐

  1. 2014年.net程序员年终总结

    2014年经历了3家公司,感觉这一年工作不怎么顺利,在2013年1月进入一家外企从事软件架构设计.开发测试.部署实施的相关工作,在2013年感觉工作很充实,在2014年由于项目的原因被迫去做项目维护, ...

  2. 探索Javascript异步编程

    异步编程带来的问题在客户端Javascript中并不明显,但随着服务器端Javascript越来越广的被使用,大量的异步IO操作使得该问题变得明显.许多不同的方法都可以解决这个问题,本文讨论了一些方法 ...

  3. 【转】BFC是什么

    原文:https://www.cnblogs.com/mlw1814011067/p/10397999.html ------------------------------------------- ...

  4. VMware中让虚拟机支持虚拟化

    一.问题 由于需要玩一下OpenNebula,但是现在自己只有一台笔记本,如何玩?当然是VMVare了,于是装了几台Ubuntu的虚拟机,但是在看安装OpenNebula的前提要求是 安装的主机cpu ...

  5. Creating OpenGL 4.3 window fails with GLFW3

      I set up a minimal application to open a blank window with GLFW3: #include <iostream> #inclu ...

  6. Android Volley 库的使用

    本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库的使用 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 Ht ...

  7. Android 事件模型

    本文内容 基于监听的事件模型 基于回调的事件模型 Android 支持两种事件模型,基于监听的事件模型和基于回调的事件模型. 基于监听的事件模型 基于监听的事件模型是一种委托式的,更"面向对 ...

  8. 看见上帝的 10 个公式……

    原文 Top Ten Greatest Equations Ever 本文内容 No.1 麦克斯韦方程组 No.2 欧拉方程 No.3 牛顿第二定律 No.4 毕达哥拉斯定理 No.5 薛定谔方程 N ...

  9. fread/fwrite

    fread/fwrite第二个参数和第三个参数的区别以及与返回值的关系 size_t fwrite_unlocked(const void * __restrict ptr, size_t size, ...

  10. Java Spring Quartz 定时任务

    公司需要使用JAVA的WebServer完成简单的定时跑任务的工作.其他例如:每隔30分钟执行锁定用户解锁任务. Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时 ...