自定义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的更多相关文章

  1. ios中自定义checkbox

    //自定义button#import <UIKit/UIKit.h> @interface CKButton : UIButton @end #import "CKButton. ...

  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中自定义图层的2种方法

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

  6. ios中自定义图层

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

  7. iOS中自定义UITableViewCell的用法

    1.先创建一个View继承 UITableViewCell并使用xib快速建立模型. #import <UIKit/UIKit.h> #import "Score.h" ...

  8. iOS 中自定义 cell,点击cell的时候文字不出现的原因

    解决方案: 在setSelected方法中设置要显示label的背景颜色即可

  9. iOS中 自定义系统相机 作者:韩俊强

    需要框架: #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> 布局如下 ...

随机推荐

  1. iOS截屏方法

    //获取屏幕截屏方法 - (UIImage *)capture { // 创建一个context UIGraphicsBeginImageContextWithOptions(self.view.bo ...

  2. iOS开发-UIRefreshControl下拉刷新

    下拉刷新一直都是第三库的天下,有的第三库甚至支持上下左右刷新,UIRefreshControl是iOS6之后支持的一个刷新控件,不过由于功能单一,样式不能自定义,因此不能满足大众的需求,用法比较简单在 ...

  3. 杨晓峰-Java核心技术-6 动态代理 反射 MD

    目录 第6讲 | 动态代理是基于什么原理? 典型回答 考点分析 知识扩展 反射机制及其演进 动态代理 精选留言 Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAnd ...

  4. Neo4j 2.0 生产环境集群搭建

    一.在windows上搭建Neo4j ha cluster的配置方法: 例如:建立集群的三台机器的ip分别为:10.230.9.91,10.230.9.92,10.230.9.93. 10.230.9 ...

  5. ASP.NET压力测试

    本文导读:对于直接面对互联网用户的WEB应用,在开发设计的时候必须格外小心,因为谁也不知道在单位时间内WEB程序访问和运行的速度.所以,在程序设计完成以后,最后针对程序进行一些严格的甚至是苛刻的测试, ...

  6. Linux中盘符的两种挂载方法

    相信接触过Linux系统的人对于mount命令都不陌生,今天是农历2017年的最后一个工作日,趁着时光还在,就说一下两种不同的挂载方法吧. 课前小知识: 命令格式:mount [-t vfstype] ...

  7. (转)Unity3D研究院之Assetbundle的原理(六十一)

    Assetbundle 是Unity Pro提供提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中,提供了封装与解包的方法使用起来很便利. 1.预设          A ...

  8. Intellij IDEA 配置Subversion插件时效解决方法

    在使用Intellij的过程中,突然发现svn不起效了,在VCS–>Checkout from Version Control中也未发现Subversion这一项.如下图: 一.原因查找 经过分 ...

  9. OpenWRT下实现Portal认证(WEB认证)

    首先简单介绍一下什么是Portal认证,Portal认证,通常也会叫Web认证,未认证用户上网时,设备强制用户登录到特定站点,用户可以免费访问其中的服务.当用户需要使用互联网中的其它信息时,必须在门户 ...

  10. Selenium2(WebDriver)总结(四)---基本元素操作

    WebDriver提供了常用的WEB控件的操作方法,比如:按钮.输入框.超链接等,废话不多说,直接上代码: import org.openqa.selenium.By; import org.open ...