1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//
// WYSegmentView.h
// GengMei
//
// Created by wangyang on 13-8-9.
// Copyright (c) 2015 Gengmei. All rights reserved.
//
#import "GMView.h"
typedef NS_ENUM(NSUInteger, WYSegmentViewWidthStyle) {
WYSegmentViewWidthStyleFixed, // Segment width is fixed
WYSegmentViewWidthStyleDynamic, // Segment width will only be as big as the text width (including inset)
WYSegmentViewWidthStyleEqual // Segment width is equal
};
typedef NS_ENUM(NSUInteger, GMSegmentBtnStyle) {
GMSegmentBtnStyleCommon = 0, // 普通的文字
GMSegmentBtnStyleLive = 1, // live 图片
};
@interface WYSegmentView : GMView
/**
* 数组的内容是要显示的 button title,设置该属性后,button 将会被自动添加,详见其 set 方法
*/
@property (nonatomic, strong) NSArray *sectionTitles;
/**
如果含有非文字类型的btn,则在该数组中对应的index 传入相关的类型和图片url,如果全是文字类型的,可不使用该字段
eg:[{'btnStyle':'GMSegmentBtnStylexxx','tabNameImage':'tab图片','iconUrl':'live动图'}]
*/
@property (nonatomic, strong) NSArray *sectionTitlesInfor;
@property (nonatomic, readonly) NSInteger selectedSegmentIndex;
@property (nonatomic, copy) void (^didSelectedBlock)(NSUInteger index);
- (void)layoutSegments;
- (void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex animated:(BOOL)animated;
#pragma mark - 自定义UI
// 没有使用 GMScrollView是想把这个 segment view做得更独立一些
@property (nonatomic, readonly) UIScrollView *scrollView;
@property (nonatomic, readonly) UIView *bottomLine;
/**
* @author wangyang, 16-02-17 15:02:53
*
* @brief 默认是Dynamic
* @since 1.0
*/
@property (nonatomic, assign) WYSegmentViewWidthStyle widthStyle;
/**
在WYSegmentViewWidthStyleFixed模式下,默认两边有23的间距。
*/
@property (nonatomic, assign) CGFloat bothEndPadding;
/**
* @author wangyang, 16-02-16 10:02:51
*
* @brief button在计算宽度时会将这个这个padding算在内,左右各加一个 itemHorizonalPadding,即buttonWidth = buttonTitleWidth + 2 * itemHorizonalPadding
* @since 1.0
*/
@property (nonatomic, assign) CGFloat itemHorizonalPadding;
@property (nonatomic, strong) NSDictionary *titleTextAttributes;
@property (nonatomic, strong) NSDictionary *selectedTitleTextAttributes;
/**
* @author wangyang, 16-02-17 11:02:24
*
* @brief 实现这个block,以便继续自定义button的UI。比如添加背景色,边框等
* @since 1.0
*/
@property (nonatomic, copy) void (^customButtonUI) (UIButton *button, NSInteger index);
/**
* @author wangyang, 16-02-15 18:02:19
*
* @brief 是否显示指示器。默认为NO
* @since 1.0
*/
@property (nonatomic, assign) BOOL showIndicator;
@property (nonatomic, strong) UIColor *indicatorColor;
/**
* @author wangyang, 16-02-17 16:02:38
*
* @brief 默认为0,此时indicator.width与button的标题一样长。
* @since 1.0
*/
@property (nonatomic, assign) CGFloat indicatorHorizonalPadding;
/**
* @author wangyang, 16-02-17 15:02:17
*
* @brief 当点击某个tab时,会调用该闭包,以正确设置的indicator动画。设置indicator.frame就可以
* @param indicator 指示符
* @param button 待指示的button
* @since 1.0
*/
@property (nonatomic, copy) void (^updateIndicatorFrame) (UIView *indicator, UIButton *button);
@end