一个 iOS 自定义 Switch 开关控件,提供简单的文字-下划线选择风格:
也提供另外一种大小字的样式:
特点:用法简单,初始化一个 SwitchViewControllerBar 然后在你的 View Controller 中实现两个 SwitchViewControllerBarDelegate 委托方法。
将 SwitchBar.h/.m、SwitchViewControllerBar.h/.m 拖到你的项目中。
在用到 SwitchViewControllerBar 的类中,导入头文件:
#import "SwitchViewControllerBar.h"
在故事版中,拖入一个 UIView,设置 Class 为 SwitchBar。 为这个 SwitchBar 创建一个 IBOutlet 连接,比如
@property (weak, nonatomic) IBOutlet SwitchViewControllerBar *switchBar;
在拖入一个普通的 UIView,作为你的子 ViewController 的容器视图,并布局其位置和大小使其符合你要展示的子控制器大小。例如上图中的红色方块即是容器视图所在。为这个 UIView 创建一个 IBOutlet,并进行适当的命名,比如命名为 placeholderView。
初始化 SwitchBar 的 items:
_switchBar.titles = @[@"节目列表",@"专辑详情"];
_switchBar.delegate = self;
_switchBar.selIndex = 0;
首先指定了子控制器的两个标题,然后设置 delegate 属性为当前 View Controller。最后,将第一个子控制器作为默认显示的子控制器。
代码:
// 1
-(UIView*)containerViewInSwitchBar:(SwitchViewControllerBar *)switchBar{
return _placeholderView;
}
// 2
-(UIViewController*)controllerInSwitchBar:(SwitchViewControllerBar *)switchBar atIndex:(NSInteger)index{
UIViewController* vc=[UIViewController new];
switch(index){
case 0:
vc.view.backgroundColor = [UIColor lightGrayColor];
break;
case 1:
vc.view.backgroundColor = [UIColor redColor];
break;
default:
break;
}
return vc;
}
- 用这个委托方法指定子控制器将放在哪个容器视图中显示。这里返回了我们在 IB 中创建的 placeholderView。
- 这个方法根据子控制器索引,返回对应的子控制器。例如,第一个子控制器返回一个灰色背景的 UIViewController,第二个子控制器则返回一个红色背景的 UIViewController。
SwitchViewControllerBar 是 SwitchBar 的子类,继承了 SwitchBar 的以下属性:
-
fontSize :标题文本的字体大小;
-
normalTitleColor:未选中时标题的文本颜色;
-
selTitleColor:选中时标题的文本颜色;
-
normalUnderlineColor:未选中时下划线的颜色;
-
selUnderlineColor:选中时下划线颜色;
-
normalUnderlineWidth:未选中时下划线的粗细;
-
selUnderlineWidth:选中时下划线的粗细;
-
textTopOffset:文字距离控件的上边距;
-
underlineTopOffset:下划线距离文字的上边距;
-
textMaxHeight:文字理论上(最大)可占据的高度;
-
titles:字符串数组,有几个标题就有几个选项;
-
selIndex:用户当前选中的标题索引。默认是 0;
-
splitterVisible:标题之间的分割线是否可见;
-
splitterWidth:分割线粗细;
-
splitterColor:分割线颜色;
-
selUnderlineWidthAlignToText:选中时下划线是否和标题宽度对齐,默认为 NO;
-
advancedMode:默认为 NO,设置为 YES 时提供一种大小字样式,即选中状态时文字为大写加粗字体,未选中状态时为小写正常字体。
在 Xcode 8 中打开 SwitchBar.xcodeproj。
有任何问题和建议,请与作者联系。