我们经常会碰到多按钮的情况,但是UISegmentedControl 的样式又不符合UI设计的风格,但是如果我们自己在界面上写多个按钮,那按钮点击的逻辑处理就很恶心。所以本人使用 UICollectionView 集成了一个按钮复选框控件,初始化的时候设置好需要的属性,不需要额外的逻辑代码,通过代理方法就可以获取选中的信息了。
可以轻松设置如下样式的复选按钮组:

基本使用:
//初始化
- (SliderControl *)chooseGuestTypeControl {
if (!_chooseGuestTypeControl) {
NSMutableArray *titles = [[NSMutableArray alloc] initWithObjects:@"本日将到", @"在住客人", nil];
_chooseGuestTypeControl = [[[NSBundle mainBundle] loadNibNamed:@"SliderControl" owner:nil options:nil] firstObject];
_chooseGuestTypeControl.titles = titles;
_chooseGuestTypeControl.sliderControlType = SliderControlWithBottomTint;
_chooseGuestTypeControl.sliderItemWidthType = SliderItemEqualWidth;
_chooseGuestTypeControl.delegate = self;
_chooseGuestTypeControl.sliderBackgroundColor = [UIColor whiteColor];
_chooseGuestTypeControl.frame = self.chooseGuestTypeContainer.bounds;
}
return _chooseGuestTypeControl;
}
//添加到父视图上
[self.chooseGuestTypeContainer addSubview:self.chooseGuestTypeControl];
#pragma mark ---SliderControlDelegate
- (void)sliderControl:(SliderControl *)sliderControl choosePartAtIndex:(NSInteger)index {
//代理方法内处理业务
}
SliderControl头文件展示
@class SliderControl;
//控件是否带图的 type
typedef NS_ENUM(NSInteger, SliderControlType) {
SliderControlWithBottomTint = 0,//无图模式,底部色条
SliderControlWithImage = 1//有图模式
};
//控件按钮是否等宽的 type
typedef NS_ENUM(NSInteger, SliderItemWidthType) {
SliderItemWidthCustom = 0,//
SliderItemEqualWidth = 1 //适用于标题等分父视图宽度的情况
};
@protocol SliderControlDelegate <NSObject>
@required
- (void)sliderControl:(SliderControl *)sliderControl choosePartAtIndex:(NSInteger)index;
@end
@interface SliderControl : UIView
@property (assign, nonatomic) SliderControlType sliderControlType;
@property (assign, nonatomic) SliderItemWidthType sliderItemWidthType;
@property (assign, nonatomic) id<SliderControlDelegate> delegate;
@property (nonatomic, strong) NSMutableArray<NSString *> *titles;//标题数组
@property (nonatomic, assign) BOOL canRepeatSelect;//是否可以重复点击
@property (nonatomic, assign) NSInteger selectRow;//选中的按钮下标
@property (nonatomic, strong) UIColor *cellTitleColor;//选中按钮标题颜色
@property (nonatomic, strong) UIColor *cellUnselectedTitleColor;//未选中按钮标题颜色
@property (nonatomic, strong) UIColor *cellSelectedBackgroundColor;//选中按钮的背景色
@property (nonatomic, strong) UIColor *sliderBackgroundColor;//控件背景色,也是未选择按钮的背景色
//以下属性设置需要在sliderControlType 为SliderControlWithImage才生效
@property (nonatomic, strong) NSString *selectedImageName;//选中的图片
@property (nonatomic, strong) NSString *unselectedImageName;//未选中的图片
@property (nonatomic) CGSize cellImageSize;//图片尺寸
//更换标题的方法
- (void)changeTileAtIndex:(int)index withTitle:(NSString *)title;
@end
最后,大家如果觉得对你有用,可以来我的 GitHub 下载源码,如有不足,还请提出哦!
//
// 清风明月时常有
// Created by Cry on 2019/3/17.
// Copyright © 2019年 foxhis. All rights reserved.
//
网友评论