仿制UISegmentedControl控件
来源:互联网 发布:java volatile 作用 编辑:程序博客网 时间:2024/06/08 14:51
在iOS中有一个控件,叫UISegmentedControl,有的时候,系统的控件不能满足我们的要求的时候,我们需要仿照系统的控件,做一个自己的属于自己的个性化的控件,如图所示:
步骤:
一:结构是,一个view中有4个按钮,左侧按钮和右侧按钮分别有不同的背景图片,因为左右两边带有圆角效果,中间的按钮也是一种背景图片,不需要圆角效果。
如图:
二:粘贴代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------
.h文件:
#import <UIKit/UIKit.h>
@class CZSegmentedControl;
@protocol CZSegmentedControlDelegate <NSObject>
@optional
/**
* 按钮被选择
*/
-(void)segmentedControl:(CZSegmentedControl *)segm didSelectedFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex;
@end
@interface CZSegmentedControl :UIView
// 代理
@property(nonatomic,weak)id<CZSegmentedControlDelegate> delegate;
//选中某一个按钮的索引
@property(nonatomic,assign)NSInteger selectedSegmentIndex;
//初始化
-(instancetype)initWithItems:(NSArray *)items;
@end
------------------------------------------------------------------------------------------------------------------------------------------------------------.m文件:
#import "CZSegmentedControl.h"
@interface CZSegmentedControl ()
/**
* 被选中的按钮
*/
@property(nonatomic,strong)UIButton *selectedBtn;
@end
@implementation CZSegmentedControl
-(void)addBtnWithNormalBgImgName:(NSString *)normalBgImgName selectedBgImgName:(NSString *)selectedBgImgName title:(NSString *)title{
//初始化按钮
UIButton *btn = [UIButtonbuttonWithType:UIButtonTypeCustom];
// 设置标题
[btn setTitle:titleforState:UIControlStateNormal];
//字体大小
btn.titleLabel.font = [UIFontsystemFontOfSize:14];
//字体颜色
[btn setTitleColor:[UIColorblackColor] forState:UIControlStateNormal];
//设置正常背景图片和选中的背景图片
[btnsetResizedNormalBg:normalBgImgName];
[btnsetResizedSelectedBg:selectedBgImgName];
//设置按钮的tag
btn.tag =self.subviews.count;
//添加监听
[btn addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
//默认第一个按钮被选中
if(self.subviews.count ==0){
btn.selected =YES;
self.selectedBtn = btn;
}
[selfaddSubview:btn];
}
/**
* 按钮的点击事件
*/
-(void)btnClick:(UIButton *)btn{
//通知代理
if([self.delegaterespondsToSelector:@selector(segmentedControl:didSelectedFromIndex:toIndex:)]){
[self.delegatesegmentedControl:selfdidSelectedFromIndex:self.selectedBtn.tagtoIndex:btn.tag];
}
//设置先前按钮的选中状态
self.selectedBtn.selected =NO;
//设置当前按钮的选中状态
btn.selected =YES;
//将当前按钮赋值给选中按钮
self.selectedBtn = btn;
}
/**
* 重新布局
*/
-(void)layoutSubviews{
[superlayoutSubviews];
NSLog(@"%s",__func__);
//子控件的个数
int count = self.subviews.count;
//按钮的宽度
CGFloat btnW = self.frame.size.width / count;
//按钮的高度
CGFloat btnH =self.frame.size.height;
CGFloat btnY = 0;
for (int i=0; i<count; i++) {
UIButton *btn = (UIButton *)self.subviews[i];
CGFloat btnX = i * btnW;
btn.frame =CGRectMake(btnX, btnY, btnW, btnH);
}
}
-(instancetype)initWithItems:(NSArray *)items{
if(self = [superinit]){
//添加按钮
for (int i =0 ; i<items.count; i++) {
NSString *title = (NSString *)items[i];
if(i == 0){ //第一个
[selfaddBtnWithNormalBgImgName:@"SegmentedControl_Left_Normal"selectedBgImgName:@"SegmentedControl_Left_Selected"title:title];
}elseif(i == items.count -1){ //最后一个
[selfaddBtnWithNormalBgImgName:@"SegmentedControl_Right_Normal"selectedBgImgName:@"SegmentedControl_Right_Selected"title:title];
}else{ // 中间
[selfaddBtnWithNormalBgImgName:@"SegmentedControl_Normal"selectedBgImgName:@"SegmentedControl_Selected"title:title];
}
}
}
return self;
}
/**
* 设置按钮被选中
*
* @param selectedSegmentIndex 选中按钮的索引
*/
-(void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex{
if(selectedSegmentIndex >=0 && selectedSegmentIndex <= (self.subviews.count -1)){
_selectedSegmentIndex = selectedSegmentIndex;
self.selectedBtn.selected =NO;
UIButton *btn = (UIButton *)self.subviews[selectedSegmentIndex];
btn.selected =YES;
self.selectedBtn = btn;
}
}
注:使用代码如下:
//初始化segmentedControl
CZSegmentedControl *segm = [[CZSegmentedControlalloc] initWithItems:items];
//设置frame
segm.frame =CGRectMake(0,0, 300, 32);
//设置代理
segm.delegate =self;
//设置titleView
self.navigationItem.titleView = segm;
------------------------------------------------------------------------------------------------------------------------------------------------------------
//代理方法
-(void)segmentedControl:(CZSegmentedControl *)segm didSelectedFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex{
NSLog(@"from : %d to : %d",fromIndex,toIndex);
}
- 仿制UISegmentedControl控件
- UISegmentedControl控件
- UISegmentedControl控件
- iphone UISegmentedControl分段控件
- UISegmentedControl分段控件
- iOS-选择控件 UISegmentedControl
- UISegmentedControl 分段控件
- UISegmentedControl分段控件
- UISegmentedControl分段控件
- UI UISegmentedControl分段控件
- iOS--分段控件UISegmentedControl
- [学习笔记][控件][UISegmentedControl]
- Swift UISegmentedControl(分组控件)
- iOS UISegmentedControl控件详解
- 分段控件----UISegmentedControl
- iOS控件之UISegmentedControl
- UISegmentedControl分段控件使用
- iOS UISegmentedControl控件详解
- 在多文档中实现CTreeCtrl
- java中CyclicBarrier简单入门使用
- Proxy(代理对象)
- object-c set方法的内存管理
- Java连接MYSQL
- 仿制UISegmentedControl控件
- 几种比较和谐的文字背景颜色搭配
- HDOJ 题目2141 Can you find it?(二分搜索)
- WPF - 使用XML作为datagrid数据源进行binding
- linux下GEC210开发环境搭建(工具链、kermit、dnw)
- 使用POI读写Excel文件
- 修改一个值,让ScrollView、ListView充满弹性
- Non-ASCII character 'xx' in file
- Eclipse快捷键大全