AUSegment 提供支持滚动的切换栏样式。
AUSegment 与 APCommonUI 中的 APSegmentedControl 并不能完全互通,因为 APSegmentedControl 只是封装了系统 UISegmentedControl 而没有其余功能。
效果图
依赖
AUSegment 的依赖为:
import "AUSegmentedControlItem.h"
接口说明
@protocol AUSegmentedControlDelegate <UIScrollViewDelegate>
//AUSegment 点击事件回调
@optional
- (void)didSegmentValueChanged:(AUSegment*)segmentControl;
- (void)didSelectSegmentItemModel:(AUSegmentItemModel*)selectedItemModel;//
@end
// segment 默认高度
#define AUSegmentHeight AU_SPACE13
/**
分段切换组件
*/
@interface AUSegment : UIScrollView
/**
初始化函数
@param frame frame
@param titles 数组:包含所有标题字符串
@return 返回 AUSegment 实例
*/
- (instancetype)initWithFrame:(CGRect)frame titles:(NSArray<NSString*> *)titles;
/**
禁用 init 方法
*/
- (instancetype)init NS_UNAVAILABLE;
/**
禁用 initWithFrame 方法
*/
- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
/**
AUSegmentedControlDelegate
*/
@property (nonatomic, weak) id <AUSegmentedControlDelegate> delegate;
/**/
/**
标题数组
*/
@property (nonatomic, strong) NSMutableArray *titles;
/**
* 菜单字体
*/
@property (nonatomic, copy) UIFont *titleFont;
/**
当前选中的 segment
*/
@property (nonatomic, assign) NSInteger selectedSegmentIndex;
/**
选中项的颜色(包括文字和滑块)
*/
@property (nonatomic, copy) UIColor *selecedColor;
/**
* 每个文字菜单水平方向的左右边距
* 默认为 21 像素
* 当为红点样式时,则 fixedItemWidth 不起作用,所有菜单不是固定宽度
*/
@property(nonatomic, assign) NSInteger textHorizontalPadding;
/**
* 是否使用固定菜单宽度
* 默认 YES,方便兼容老的菜单样式
* 当为 YES 时,则 horizontalPadding 不起作用,所有菜单固定同一宽度
*/
@property (nonatomic, assign) BOOL fixedItemWidth;
/**
* 是否自动滚动选中菜单项到合适位置(优先中间位置,不够位置时再靠边显示)
* 默认为 NO
*/
@property (nonatomic, assign) BOOL autoScroll;
/**
* 点击后是否自动更新指示条到当前选中 item 的下标
* 默认为 YES
*/
@property (nonatomic, assign) BOOL autoChangeSelectedIndex;
/*
* model 数组
*/
@property(nonatomic, strong) NSMutableArray<AUSegmentItemModel *> *itemModels;
/**
支持中间插入多项
@param array 插入的标题数组
@param indexes 插入的 indexs
*/
- (void)insertTitleArray:(NSArray<NSString*> *)array atIndexes:(NSIndexSet *)indexes;
/**
支持在末尾新增多项
@param array 新增的标题数组
*/
- (void)addTitleArray:(NSArray<NSString*>*)array;
/**
* 设置自动滚动到指定下标位置,注意:只滚动展示 item,选中指示条保持不变
* 默认与 selectedSegmentIndex(即选中项保持一致)
*/
- (void)autoScrollToIndex:(NSInteger)index;
- (BOOL)segmentItemIsInVisualAear:(NSInteger)index;
@end
@interface AUSegmentItemModel : NSObject
@property(nonatomic, copy) NSString *title;
@property(nonatomic, copy) UIImage *img;
@property(nonatomic, copy) NSString *imgId;
@property(nonatomic, copy) NSString *badgeNumber;
@property(nonatomic, copy) NSString *badgeWidgetId;
@property(nonatomic, assign) BOOL badgeReserved; // 设置当前 item 是否要预留红点位置,如果不预留则红点展示时界面可能有跳动感
@property(nonatomic, strong) NSDictionary *extendInfo; // 扩展字段
@end
@interface AUSegment (ItemModel)
/**
* 第二版的初始化函数
* @param frame frame
* @param menus item 数组
*/
- (instancetype) initWithFrame:(CGRect)frame menus:(NSArray<AUSegmentItemModel *>*)menus;
/**
支持更新控件 item 项
@param items 需要更新的 item 数组,主要用于增删或者全部更新已有 model 数据
*/
- (void)updateItems:(NSArray<AUSegmentItemModel *>*)items;
/**
支持更新控件 item 项
@param items 删除已有数据,重新替换为新的 item 数据
*/
- (void)updateItemModel:(AUSegmentItemModel *)model
atIndex:(NSInteger)index;
@end
// 右边显示行动点按钮,默认显示加号 +
@interface AUSegment (AUActionIcon)
- (void)showActionIcon:(BOOL)showIcon target:(id)target action:(SEL)action;
@end
自定义属性
属性 | 用途 | 类型 |
titles | segment 的标题数组。 | NSArray |
selectedSegmentIndex | 当前选中的 segment。 | NSInteger |
delegate | 实现 AUSegmentedControlDelegate。 | id |
autoScroll | 是否自动滚动选中菜单项到合适位置,优先中间位置,不够位置时再靠边显示。 | BOOL |
fixedItemWidth | 是否使用固定菜单宽度。 | BOOL |
textHorizontalPadding | 每个文字菜单水平方向的左右边距。 | BOOL |
titleFont | 自定义菜单字体。 | UIFont |
代码示例
不带红点的分段控件:
NSArray *testArray1 = @[@"tab1",@"tab2",@"tab3",@"tab4",@"tab5",@"tab6",@"tab7",@"tab8"]; AUSegment *segment = [[AUSegment alloc] initWithFrame:CGRectMake(0, 300, self.view.width, 44) titles:testArray1]; segment.delegate = self; [self.view addSubview:segment]; //回调 - (void)didSegmentValueChanged:(AUSegment*)segmentControl { NSLog(@"AUSegmented切换了"); }
带红点的分段控件:
NSMutableArray *array = [[NSMutableArray alloc] init]; for (int i=0; i<7; i++) { AUSegmentItemModel *model = [[AUSegmentItemModel alloc] init]; model.title = [NSString stringWithFormat:@"选项 %d", i]; if (i == 0) { model.badgeNumber = @"."; } if (i == 1) { model.badgeNumber = @"new"; } if (i == 6) { model.badgeNumber = @"6"; } model.badgeReserved = YES; [array addObject:model]; } AUSegment *segment2 = [[AUSegment alloc] initWithFrame:CGRectMake(0, topMargin, self.view.width, 44) menus:array]; [self.view addSubview:segment2]; [segment2 autoScrollToIndex:6]; segment2.backgroundColor = [UIColor whiteColor]; [segment2 showActionIcon:YES target:self action:@selector(clickActionIcon:)];
文档内容是否对您有帮助?