//自定义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. Go语言之进阶篇文件传输

    一.文件传输 1.文件传输原理 2.文件传输 示例: 发送方: send_file.go package main import ( "fmt" "io" &q ...

  2. Cesium中导入三维模型方法(dae到glft/bgltf) 【转】

    http://blog.csdn.net/l491453302/article/details/46766909 目录(?)[+] Cesium中目前支持gltf和bgltf两种格式.“gltf是kh ...

  3. DOM之通俗易懂讲解

    DOM是所有前端开发每天打交道的东西,但是随着jQuery等库的出现,大大简化了DOM操作,导致大家慢慢的“遗忘”了它的本来面貌.不过,要想深入学习前端知识,对DOM的了解是不可或缺的,所以本文力图系 ...

  4. 大数据开发实战:MapReduce内部原理实践

    下面结合具体的例子详述MapReduce的工作原理和过程. 以统计一个大文件中各个单词的出现次数为例来讲述,假设本文用到输入文件有以下两个: 文件1: big data offline data on ...

  5. xgboost入门与实战

    xgboost入门与实战(实战调参篇) https://blog.csdn.net/sb19931201/article/details/52577592 前言 前面几篇博文都在学习原理知识,是时候上 ...

  6. Mongo DB Sharding

    Database Sharding is considered to be the horizontal partitioning of a database or the search engine ...

  7. Hibernate中得fetch

    fetch ,可以设置fetch = "select" 和 fetch = "join" 用一对多来举例:fetch = "select"是 ...

  8. Android 自定义 ListView 上下拉动刷新最新和加载更多

    本文内容 开发环境 演示上下拉动刷新最新和加载更多 ListView 参考资料 本文演示上下拉动,刷新最新和加载更多,这个效果很常见,比如,新闻资讯类 APP,当向下拉动时,加载最新的资讯:向上拉动时 ...

  9. js 时间加减

    //js格式化时间 "yyyy-MM-dd hh:mm:ss" Date.prototype.Format = function (fmt) { var o = { "M ...

  10. Jquery 中的CheckBox、 RadioButton、 DropDownList的取值赋值

    1.获取选中值,三种方法都可以: $('input:radio:checked').val(): $("input[type='radio']:checked").val(); $ ...