URBSegmentedControl 1.0.4

URBSegmentedControl 1.0.4

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2016年1月

Nicholas Shipes 维护。



  • 作者:
  • Nicholas Shipes

概述

URBSegmentedControl 是 UIKit 中默认的 UISegmentedControl 的另类更具灵活性,它提供了更简单的自定义和更多选项,以布局方向包括标题和图片。不过,大部分在 UISegmentedControl 中可用的功能和 API 方法也在 URBSegmentedControl 中提供,使得它更容易在本项目中使用。

Screenshot of the sample project example

特点

  • 区间可以是仅图标或标题,也可以是标题与图标的组合
  • 支持可定制的颜色和字体
  • 支持使用 UIAppearance 在所有实例上设置全局样式
  • 支持用于值变化的 blocks
  • 自动根据普通图像和选中图像的颜色着色图像(无需两个独立的图标版本)
  • 整体控件和每个单个区间的水平和垂直布局方向
  • 使用 ARC,并针对 iOS 5.0+

安装

手动安装

  • URBSegmentedControl.hURBSegmentedControl.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

默认情况下,您的图像将使用您通过imageColorselectedImageColor属性定义的颜色进行着色。如果您希望保持图像的原始格式,只需要将这些颜色属性设置为nil

control.imageColor = nil;
control.selectedImageColor = nil;

在大多数情况下,应用于每个单独分段的默认内边距对内容、标题和图像都适用。但是,如果你的控制面板较小或你希望更精确地调整元素大小,你可以通过设置以下属性来调整内边距

@property (nonatomic, assign) UIEdgeInsets contentEdgeInsets;
@property (nonatomic, assign) UIEdgeInsets titleEdgeInsets;
@property (nonatomic, assign) UIEdgeInsets imageEdgeInsets;

待办事项

  • 支持设置用于背景和段状态图像,而不是在类中用CoreGraphics绘制
  • 支持UISegmentedControl的momentary模式 - 更好地支持使用UIAppearance定制

鸣谢

示例URBSegmentedControlDemo项目使用了以下图标,这些图标分别由各自作者创建(均来自The Noun Project

许可证

此代码根据MIT许可证的条款和条件进行分发。请参阅完整的许可证以获取所有详细信息。

支持/联系

你认为找到了一个错误或者仅仅有一个功能请求?只需作为一个问题发布,但确保先查阅现有的问题以避免重复。你也可以通过@u10int与我取得联系,告诉我你如何使用这个组件。谢谢!