ios中自定义checkbox
//自定义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的更多相关文章
- [转]Android中自定义checkbox样式
android中自定义checkbox的图片和大小 其实很简单,分三步: 1.在drawable中创建文件checkbox_selector.xml: <?xml version=" ...
- ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用
做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...
- ios中自定义cell 设置cell的分组结构
ios系统默认的cell并不能满足我们的需求 这个时候就需要自定义我们的cell 自定义cell为分组的时候 需要设置分组样式 以下是我常用分组的二种方法: 第一是 在自定义的UITableView ...
- iOS中 自定义cell分割线/分割线偏移 韩俊强的博客
在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注 ...
- IOS开发自定义CheckBox控件
IOS本身没有系统的CheckBox组件,但是实际开发中会经常用到,所以专门写了一个CheckBox控件,直接上代码 效果图: UICheckBoxButton.h文件如下: #import #imp ...
- Android中自定义Checkbox
custom_checkbox.xml文件: <?xml version="1.0" encoding="utf-8"?> <selector ...
- ios中自定义图层的2种方法
1:自定义图层,在图层中画图 #import <QuartzCore/QuartzCore.h> @interface MJLayer : CALayer @end #import &qu ...
- ios中自定义图层
图层和VIEW的区别 1:view不具备显示功能,是因view内部有一个图层,才能显示出来 2:图层不具备事件功能,VIEW继承UIRespone具有处理事件功能 3:自定义的图层有一个影式动画,VI ...
- android中自定义checkbox的图片和大小
其实很简单,分三步: 1.在drawable中创建文件checkbox_selector.xml: <?xml version="1.0" encoding="ut ...
随机推荐
- 2014年.net程序员年终总结
2014年经历了3家公司,感觉这一年工作不怎么顺利,在2013年1月进入一家外企从事软件架构设计.开发测试.部署实施的相关工作,在2013年感觉工作很充实,在2014年由于项目的原因被迫去做项目维护, ...
- 探索Javascript异步编程
异步编程带来的问题在客户端Javascript中并不明显,但随着服务器端Javascript越来越广的被使用,大量的异步IO操作使得该问题变得明显.许多不同的方法都可以解决这个问题,本文讨论了一些方法 ...
- 【转】BFC是什么
原文:https://www.cnblogs.com/mlw1814011067/p/10397999.html ------------------------------------------- ...
- VMware中让虚拟机支持虚拟化
一.问题 由于需要玩一下OpenNebula,但是现在自己只有一台笔记本,如何玩?当然是VMVare了,于是装了几台Ubuntu的虚拟机,但是在看安装OpenNebula的前提要求是 安装的主机cpu ...
- Creating OpenGL 4.3 window fails with GLFW3
I set up a minimal application to open a blank window with GLFW3: #include <iostream> #inclu ...
- Android Volley 库的使用
本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库的使用 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 Ht ...
- Android 事件模型
本文内容 基于监听的事件模型 基于回调的事件模型 Android 支持两种事件模型,基于监听的事件模型和基于回调的事件模型. 基于监听的事件模型 基于监听的事件模型是一种委托式的,更"面向对 ...
- 看见上帝的 10 个公式……
原文 Top Ten Greatest Equations Ever 本文内容 No.1 麦克斯韦方程组 No.2 欧拉方程 No.3 牛顿第二定律 No.4 毕达哥拉斯定理 No.5 薛定谔方程 N ...
- fread/fwrite
fread/fwrite第二个参数和第三个参数的区别以及与返回值的关系 size_t fwrite_unlocked(const void * __restrict ptr, size_t size, ...
- Java Spring Quartz 定时任务
公司需要使用JAVA的WebServer完成简单的定时跑任务的工作.其他例如:每隔30分钟执行锁定用户解锁任务. Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时 ...