URBSegmentedControl
是 UIKit 中默认的 UISegmentedControl
的另类更具灵活性,它提供了更简单的自定义和更多选项,以布局方向包括标题和图片。不过,大部分在 UISegmentedControl
中可用的功能和 API 方法也在 URBSegmentedControl
中提供,使得它更容易在本项目中使用。
URBSegmentedControl.h
和 URBSegmentedControl.m
文件导入到您的项目中,并在需要的位置包括 "URBSegmentedControl.h
",或者是在预编译头文件中QuartzCore.framework
" 添加到您的项目中的 构建阶段
> 与二进制链接库
链接 QuartzCore
框架安装完成后,您就可以使用 URBSegmentedControl
,就像使用 UIKit 的 UISegmentedControl
一样。
此项目使用 ARC,并针对 iOS 5.0+。
(请参阅所包含项目中 /SampleProject 下的更详细的用法示例)
以下是一个简单示例,创建一个 URBSegmentedControl 实例,与 UISegmentedControl 相同
NSArray *titles = [NSArray arrayWithObjects:[@"Item 1" uppercaseString], [@"Item 2" uppercaseString], [@"Item 3" uppercaseString], nil];
URBSegmentedControl *control = [[URBSegmentedControl alloc] initWithItems:titles];
[control addTarget:self action:@selector(handleSelection:) forControlEvents:UIControlEventValueChanged];
[viewController.view addSubview:control];
您不必将控制的目标添加到对值变化的响应中,您可以对每个实例设置一个处理器块
NSArray *titles = [NSArray arrayWithObjects:[@"Item 1" uppercaseString], [@"Item 2" uppercaseString], [@"Item 3" uppercaseString], nil];
URBSegmentedControl *control = [[URBSegmentedControl alloc] initWithItems:titles];
[control setControlEventBlock:^(NSInteger index, URBSegmentedControl *segmentedControl) {
NSLog(@"control value changed - index=%i", index);
}];
[viewController.view addSubview:control];
如果您只想有一个带有图标的控件,您可以使用 initWithIcons:
初始化实例
NSArray *icons = [NSArray arrayWithObjects:[UIImage imageNamed:@"mountains.png"], [UIImage imageNamed:@"snowboarder.png"], [UIImage imageNamed:@"biker.png"], nil];
URBSegmentedControl *control = [[URBSegmentedControl alloc] initWithIcons:icons];
[viewController.view addSubview:control];
或者,您可以使用标题和图像(只要为每个提供的数组长度相等)初始化一个实例
NSArray *titles = [NSArray arrayWithObjects:[@"Item 1" uppercaseString], [@"Item 2" uppercaseString], [@"Item 3" uppercaseString], nil];
NSArray *icons = [NSArray arrayWithObjects:[UIImage imageNamed:@"mountains.png"], [UIImage imageNamed:@"snowboarder.png"], [UIImage imageNamed:@"biker.png"], nil];
URBSegmentedControl *control = [[URBSegmentedControl alloc] initWithTitles:titles icons:icons];
[viewController.view addSubview:control];
您可以使用以下属性对 URBSegmentedControl
进行定制
// base styles
@property (nonatomic, strong) UIColor *baseColor; // default [UIColor colorWithWhite:0.3 alpha:1.0]
@property (nonatomic, strong) UIColor *strokeColor; // default [UIColor darkGrayColor]
@property (nonatomic, assign) CGFloat strokeWidth; // default 2.0
@property (nonatomic) CGFloat cornerRadius; // default 2.0
@property (nonatomic, assign) UIEdgeInsets segmentEdgeInsets; // default UIEdgeInsetsMake(4.0, 4.0, 4.0, 4.0)
@property (nonatomic, assign) URBSegmentImagePosition imagePosition; // default URBSegmentImagePositionLeft
// segment styles
@property (nonatomic, strong) UIColor *segmentBackgroundColor; // default [UIColor redColor]
@property (nonatomic, strong) UIColor *imageColor; // default [UIColor grayColor]
@property (nonatomic, strong) UIColor *selectedImageColor; // default [UIColor whiteColor]
@property (nonatomic, assign) BOOL showsGradient; // determines if the base and segment background should have a gradient applied, default YES
默认情况下,您的图像将使用您通过imageColor
和selectedImageColor
属性定义的颜色进行着色。如果您希望保持图像的原始格式,只需要将这些颜色属性设置为nil
control.imageColor = nil;
control.selectedImageColor = nil;
在大多数情况下,应用于每个单独分段的默认内边距对内容、标题和图像都适用。但是,如果你的控制面板较小或你希望更精确地调整元素大小,你可以通过设置以下属性来调整内边距
@property (nonatomic, assign) UIEdgeInsets contentEdgeInsets;
@property (nonatomic, assign) UIEdgeInsets titleEdgeInsets;
@property (nonatomic, assign) UIEdgeInsets imageEdgeInsets;
momentary
模式示例URBSegmentedControlDemo项目使用了以下图标,这些图标分别由各自作者创建(均来自The Noun Project)
此代码根据MIT许可证的条款和条件进行分发。请参阅完整的许可证以获取所有详细信息。
你认为找到了一个错误或者仅仅有一个功能请求?只需作为一个问题发布,但确保先查阅现有的问题以避免重复。你也可以通过@u10int与我取得联系,告诉我你如何使用这个组件。谢谢!