ios中自定义button
自定义button
#import <UIKit/UIKit.h>
#define KFont 15 @interface DIYButton : UIButton @property(nonatomic,copy)NSString *ctrlName;
@end #import <UIKit/UIKit.h>
#define KFont 15 @interface DIYButton : UIButton @property(nonatomic,copy)NSString *ctrlName;
@end
自定义 view
@protocol FirstNavViewDelegate; @interface FirstNavView : UIView @property(nonatomic,retain)NSArray *data;
@property(nonatomic,assign)id<FirstNavViewDelegate> delegate;
- (id)initWithFrame:(CGRect)frame data:(NSArray *)adata;
@end @protocol FirstNavViewDelegate <NSObject> -(void)FirstNavViewClick:(DIYButton *)btn; @end #import "FirstNavView.h"
#import "InvoiceInfo.h"
#define KPadding 50
#define KMinTag 10 @implementation FirstNavView - (id)initWithFrame:(CGRect)frame data:(NSArray *)adata
{
self = [super initWithFrame:frame];
if (self) { CGFloat width=self.bounds.size.width/adata.count;
CGFloat height=self.bounds.size.height;
CGFloat center=width*0.5f;
for (int i=; i<adata.count; i++) {
DIYButton *btn=[[DIYButton alloc] init];
btn.bounds=CGRectMake(, , width-KPadding, height);
btn.center=CGPointMake(i*width+center, height*0.5f);
btn.tag=KMinTag+i;
[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:btn];
[btn release];
}
self.data=adata;//这一句是重点 }
return self;
} -(void)click:(DIYButton *)btn{
if (self.delegate &&[self.delegate respondsToSelector:@selector(FirstNavViewClick:)]) {
[self.delegate FirstNavViewClick:btn];
}
} -(void)setData:(NSArray *)data{
if (_data!=data) {
[_data release];
_data=[data retain];
for (int i=; i<data.count; i++) {
InvoiceInfo *info=data[i];
int tag=KMinTag+i;
UIView *view=[self viewWithTag:tag];
if ([view isKindOfClass:[DIYButton class]]) {
DIYButton *btn=(DIYButton *)view;
[btn setImage:[UIImage imageNamed:info.imagUrl] forState:UIControlStateNormal];
[btn setTitle:info.name forState:UIControlStateNormal];
btn.ctrlName=info.iPad_ctrls;
}
} }
} @end
使用 要实现
FirstNavViewDelegate这个协议
//一级导航
NSMutableArray *NavArrary=[NSMutableArray array];
path=[[NSBundle mainBundle]pathForResource:@"Pad_Menu_First" ofType:@"json"];
NSError *navError=nil;
content=[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&navError];
if (navError) {
NSLog(@"读取%@错误",path);
return;
}
NSArray *arr=[content JSONValue];
for (NSDictionary *dic in arr) {
InvoiceInfo *info=[InvoiceInfo Invoice:dic];
[NavArrary addObject:info];
} FirstNavView *navFirst=[[FirstNavView alloc] initWithFrame:tpRec data:NavArrary];
navFirst.delegate=self;
[self.view addSubview:navFirst];
[navFirst release];
-(void)FirstNavViewClick:(DIYButton *)btn{
NSLog(@"一级导航__%@__%@",btn.titleLabel.text,btn.ctrlName);
[selfpushNavVc:btn.ctrlName];
}
ios中自定义button的更多相关文章
- ios中自定义checkbox
//自定义button#import <UIKit/UIKit.h> @interface CKButton : UIButton @end #import "CKButton. ...
- ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用
做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...
- ios中自定义cell 设置cell的分组结构
ios系统默认的cell并不能满足我们的需求 这个时候就需要自定义我们的cell 自定义cell为分组的时候 需要设置分组样式 以下是我常用分组的二种方法: 第一是 在自定义的UITableView ...
- iOS中 自定义cell分割线/分割线偏移 韩俊强的博客
在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注 ...
- ios中自定义图层的2种方法
1:自定义图层,在图层中画图 #import <QuartzCore/QuartzCore.h> @interface MJLayer : CALayer @end #import &qu ...
- ios中自定义图层
图层和VIEW的区别 1:view不具备显示功能,是因view内部有一个图层,才能显示出来 2:图层不具备事件功能,VIEW继承UIRespone具有处理事件功能 3:自定义的图层有一个影式动画,VI ...
- iOS中自定义UITableViewCell的用法
1.先创建一个View继承 UITableViewCell并使用xib快速建立模型. #import <UIKit/UIKit.h> #import "Score.h" ...
- iOS 中自定义 cell,点击cell的时候文字不出现的原因
解决方案: 在setSelected方法中设置要显示label的背景颜色即可
- iOS中 自定义系统相机 作者:韩俊强
需要框架: #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> 布局如下 ...
随机推荐
- js面向对象之继承-原型继承
//animal 父类 超类 var Animal = function(name) { this.name = name; this.sayhello = function() { alert(&q ...
- Ios开发之协议protocol
Protocol是ios开发中的一个难点也是一个重点,要想使用好,或者理解好它,可能需要时间的累积.今天我们就通过一个例子来简单的看一下,怎么样使用protocol. 我们今天用的例子就是模拟电脑插入 ...
- Python3 简单验证码识别思路及实例
1.介绍 在爬虫中经常会遇到验证码识别的问题,现在的验证码大多分计算验证码.滑块验证码.识图验证码.语音验证码等四种.本文就是识图验证码,识别的是简单的验证码,要想让识别率更高, 识别的更加准确就需要 ...
- Kudu-java数据库简单操作
参考官网:http://kudu.apache.org/docs/kudu_impala_integration.html 参考:https://my.oschina.net/weiqingbin/b ...
- 仿qq底部的提示标记
看到一个比較不错的开源项目,分享给大家: <?xml version="1.0" encoding="utf-8"?> <RelativeLa ...
- 解决 win7 注册com组件失败问题
解决 win7 注册com组件失败问题 运行:regsvr32 xxx.ocx 提示:模块 "xxx.ocx" 已加载,但对调用 dllregisterserver 的调用失败,错 ...
- ECShop模板原理
模板的原理 类似Smarty/ECShop这类模板的原理如下图所示. 1.首先是编译模板ECShop/Smart是利用PHP引擎,所以编译的结果是一个PHP文件,其编译过程就是 将分隔符{}替换成PH ...
- Python MySQLdb模块连接操作mysql数据库实例_python
mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...
- centos下mysql自动备份
#!/bin/bashdb_user="root"db_passwd="123456"db_name="test_db"#进入备份目录将之前 ...
- 加快Android Studio的编译速度
从Eclipse切换到Android Studio后,感觉Android Studio的build速度比Eclipse慢很多,以下几个方法可以提高Android Studio的编译速度 使用Gradl ...