iOS UISegmentedControl控件详解

我们经常使用的一个控件是Tab,这个控件可以帮助我们将App分为几个模块,但是在一个界面内我们想要再进行细分怎么办呢?这时候就需要用到UISegmentedControl控件了,这个控件的用处就是进行分段控制,实现的样式如下:

当选中一个分段的时候,其颜色填充,其余分段为未选中状态,可以很清晰明了地告知用户当前在哪个分段内容下,也方便用户切换。

具体的实现方式,还是先看代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    // 初始化,添加分段名,会自动布局
    self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[@"正在销售", @"已下架"]];
    self.segmentedControl.frame = CGRectMake(-5, 50, SCREENWIDTH+10, 30);

    // 设置整体的色调
    self.segmentedControl.tintColor = cmGreen;

    // 设置分段名的字体
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:cmGreen,NSForegroundColorAttributeName,[UIFont systemFontOfSize:18],NSFontAttributeName ,nil];
    [self.segmentedControl setTitleTextAttributes:dic forState:UIControlStateNormal];

    // 设置初始选中项
    self.segmentedControl.selectedSegmentIndex = 0;

    [self.segmentedControl addTarget:self action:@selector(selectItem:) forControlEvents:UIControlEventValueChanged];// 添加响应方法

    // 设置样式的segmentedControlStyle属性在iOS 7.0之后将不再起作用

    // 设置点击后恢复原样,默认为NO,点击后一直保持选中状态
    self.segmentedControl.momentary = YES;

    // 在指定序号处插入一个分段,会自动布局
    [self.segmentedControl insertSegmentWithTitle:@"已删除" atIndex:2 animated:NO];

    // 在指定序号处移除一个分段,会自动布局
    [self.segmentedControl removeSegmentAtIndex:2 animated:NO];

    // 设置指定序号处的分段的宽度
    [self.segmentedControl setWidth:50.0 forSegmentAtIndex:1];

    // 获取指定序号处标题的内容
    NSLog(@"%@", [self.segmentedControl titleForSegmentAtIndex:1]);

    // 获取指定序号处标题的宽度
    NSLog(@"%f", [self.segmentedControl widthForSegmentAtIndex:1]);

    // 设置指定序号处的分段不可选
    [self.segmentedControl setEnabled:NO forSegmentAtIndex:1];

    [self.view addSubview:self.segmentedControl];

}

- (void)selectItem:(UISegmentedControl *)sender {
    if (sender.selectedSegmentIndex == 0) {
        NSLog(@"正在销售");
    } else {
        NSLog(@"已下架");
    }
}

注释已经都写的比较清楚了,有几个注意的地方特别提一下:

  • UISegmentedControl的风格在iOS 7.0之后就不能设置了,相应的属性也进行了说明,即使设置了也是无效。
  • 其实UISegmentedControl的样式时一个整体的圆角矩形,两边并不是像图中那样没有左右两边的,但是我觉得四个圆角不太好看,所以用了一个小技巧,将其起始的x坐标设为了-5,将其宽度设为了屏幕宽度+10,这样左右的圆角就隐藏起来了,看上去觉得要美观一些,我尝试过用layer来将角度调整为0,不起作用。
  • 字体不能直接设置,只能像代码中一样创建一个字典来设置。
  • 唤起响应方法的动作是UIControlEventValueChanged,是改变值的响应,而不是按钮那种TouchUpside。
  • 分段的标题可以用文字(我这里都是文字)也可以用图片,基本都有对应的方法,可以在使用的时候根据代码补全提示去找。
  • 初始化的时候如果没有设置初始的分段标题,而是用initWithFram来初始化的话,我尝试在后面用insertSegmentWithTitle来添加标题,不起作用。

这就是我的一点粗浅研究啦,可以在Github下载我的示例工程



版权所有:http://blog.csdn.net/cloudox_

时间: 2024-08-10 07:20:37

iOS UISegmentedControl控件详解的相关文章

IOS—UITextFiled控件详解

IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)]; //设置边框样式,只有设置了才会显示边框样式 text.borderStyle = UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone, UITextBorderS

asp.net验证控件详解

ASP.NET验证控件详解     现在ASP.NET,你不但可以轻松的实现对用户输入的验证,而且,还可以选择验证在服务器端进行还是在客户端进行,再也不必考虑那么多了,程序员们可以将重要精力放在主程序的设计上了. ASP.NET公有六种验证控件,分别如下: 控件名           功能描叙 RequiredFieldValidator(必须字段验证) 用于检查是否有输入值 CompareValidator(比较验证) 按设定比较两个输入 RangeValidator(范围验证) 输入是否在指

ASP.NET 验证控件详解

body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;

lodoop打印控件详解

注意:使用此打印控件需要引入(在我上传的Demo中都有): install_lodop32.exe install_lodop64.exe LodopFuncs.js jquery-1.10.0.min.js 具体Demo下载地址: http://download.csdn.net/download/l294333475/7697807 <%@ page language="java" import="java.util.*" pageEncoding=&qu

【IOS 开发】基本 UI 控件详解 (UIDatePicker | UIPickerView | UIStepper | UIWebView | UIToolBar )

转载注明出处 : http://blog.csdn.net/shulianghan/article/details/50348982 一. 日期选择器 (UIDatePicker) UIDatePicker 属性截图 : 1. UIDatePicker 控件属性 (1) Mode 属性 Mode 属性 : 用于设置 UIDatePicker 模式; -- Date 属性值 : 显示日期, 不显示时间; -- Time 属性值 : 显示时间, 不显示日期; -- Date and Time 属性值

IOS之UIStepper控件详解

在iOS5中新增了一个数字输入控件UIStepper,它可以递进式输入数量.UIStepper继承自UIControl,它主要的事件是UIControlEventValueChanged,每当它的值改变了就会触发这个事件.它的显示效果如下: 它主要有下面几个属性 value 当前所表示的值,默认0.0 minimumValue 最小可以表示的值,默认0.0 maximumValue 最大可以表示的值,默认100.0 stepValue 每次递增或递减的值,默认1.0 设置以上几个值,一般就可以很

Swift编程中字符转为类,代码创建控件详解

在swift编程(http://www.maiziedu.com/course/ios/16-161/)中,我们都会遇到这样两个问题,如何把字符转为类和代码创建控件的方法,下面就具体讲解这两个知识点 在使用类之前要先获得 命名空间 通过json来获取 字符型的类名 然后创建类对象,这时候就要用到字符转类 // 从info字典中获取到 命名空间 转为字符型 let NS = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"

GridView控件详解

一.介绍 GridView控件一表格形式显示数据源中的数据.提供对列进行排序.分页以及编辑.删除单个记录的功能. 二.绑定数据源 第一种使用DataSourceID属性.可以直接把GridView控件绑定到数据源控件上,以利用数据源控件的功能实现编辑.删除.排序.分页等功能.(初级) 第二种可以绑定到ADO.NET数据集和数据读取器对象上,但需要为所有功能编写后台代码.(一般使用这种方式) private void gridViewBind() { //获取GridView排序数据列及排序方向

UIScrollView —— 分页控件详解(三)——(第一讲)

1 . 所用知识 须知,要达到分页效果,所以会用到UIScrollView的ContentOffset属性,设置其UIScrollView分页移动位置,要有页码就用到了UIPageControl控件显示页码条,而且不要开始不要忘记了设置UIScrollView的属性ContentSize来设置其展示内容范围,要让UIScrollView达到分页效果,还要设置其属性pagingEnabled为YES. 2 . 案例详情 1> 在storyboard上拖拽一个UIScrollView和UIPageC