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 ...
随机推荐
- 【大数据】下载Windows版本的Redis 转
https://www.cnblogs.com/tommy-huang/p/6093813.html 下载Windows版本的Redis 1.打开官网http://redis.io/点击Downl ...
- Linux上传和下载之Xshell
一.安装与授权 安装时候需要注意的是,选择 Free For Home/School选项进行安装,如下图所示安装成功后 二.上传 上传需要使用rz命令,如下图所示,第一次可能会提示你命令无效或者提示你 ...
- 解决webstom failed to change read-only files
我百思不得其解的是,为何我的文件不让我更改,变成了只读模式,后来我仔细回忆了一下,原来是因为我使用了root权限,来安装thinkjs之后,webstom没有root权限,所以我使用root,在终端敲 ...
- springboot 中使用事务
直接在service 层的方法上加上@Transactional 注解就ok. 注意事项: 1.Spring 基于注解的声明式事物 @Transactional 默认情况下只会对运行期异常(java. ...
- POI的一些配置
引用:http://apps.hi.baidu.com/share/detail/17249059 POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWork ...
- jQuery对象
$(document).ready(function(){ //第二种获取方法,通过标签的名<h2>Dom来获取 var h1 = document.getElementsByTagNam ...
- artTemplate 简洁语法版
引用简洁语法的引擎版本,例如: <script src="dist/template.js"></script> 下载 表达式 {{ 与 }} 符号包裹起来 ...
- Discuz常见小问题-如何关闭验证码
进入后台,在防灌水,验证设置中可以切换哪些情况下是否使用验证码 如果启用验证码,也客户修改验证码的难度,样式.最后点击提交,完成之后可以退出到前台,测试是否能够不用验证码自动登录
- 轻松python文本专题-字符与字符值转换
场景: 将字符转换成ascii或者unicode编码 在转换过程中,注意使用ord和chr方法 >>> print(ord('a')) 97 >>> print(c ...
- CAD2006您没有足够的权限来安装本产品
在Win10的环境下安装CAD2006,可能会报错"您没有足够的权限来安装本产品". 解决方法是,右键以"兼容性疑难解答"运行 在弹出的对话框中,点击 &quo ...