初始化UISegmentedControl

NSArray *arr = [[NSArray alloc]initWithObjects:@"轻拍",@"长按",@"清扫",@"旋转",@"捏合",@"拖拽", nil];

//先创建一个数组用于设置标题

UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:arr];

//在没有设置[segment setApportionsSegmentWidthsByContent:YES]时,每个的宽度按segment的宽度平分

segment.frame = CGRectMake(0, 400, 320, 40);

//设置frame

 

管理Segment的内容

[segment setTitle:@"大便" forSegmentAtIndex:3]; 

//设置下标为3的segment的标题 下标以0开始 IOS里的所有下标都是以0开始

[segment setImage:[UIImage imageNamed:@"3"] forSegmentAtIndex:4];

//设置下标为4的segment的图片

 

管理Segments

[segment insertSegmentWithImage:[UIImage imageNamed:@"3"] atIndex:2 animated:YES]; //设置图片

[segment insertSegmentWithTitle:@"ddd" atIndex:0 animated:YES];//设置标题

[segment numberOfSegments];//得到segment的数量

[segment removeAllSegments];//移出所有segment

[segment removeSegmentAtIndex:2 animated:YES];//移出下标为2的segment

segment.selectedSegmentIndex = 0;//选中第几个segment 一般用于初始化时选中

 

管理Segment的行为和外观   

segment.momentary = NO;

//默认为NO 当设置为YES时,当被选中后,一会儿后不显示被选中状态(最左边的样子),不选中状态即下图的右边几个按钮一样


segment.segmentedControlStyle = UISegmentedControlStyleBar;

typedef enum {
   UISegmentedControlStylePlain,
   UISegmentedControlStyleBordered,
   UISegmentedControlStyleBar,
   UISegmentedControlStyleBezeled,
} UISegmentedControlStyle;

//设置样式 当为Bordered和Bar时tintColor才有效 下图为tintcolor为红色时的样子

//Bar样式

//Bordered

[segment setEnabled:NO]; //设置segment是否可用 此方法是其父类UIControl的方法

[segment setEnabled:NO forSegmentAtIndex:2];//设置下标为2的segment不可用

[segment setWidth:100 forSegmentAtIndex:2]; //这时下表为2的segment的宽度

[segment setContentOffset:CGSizeMake(10, 10) forSegmentAtIndex:2];//设置内容偏移

segment.apportionsSegmentWidthsByContent = YES; //是否根据segment的内容改变segment的宽度

自定义外观

[segment setTintColor:[UIColor redColor]]; //设置segments的颜色

[segment setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

typedef enum {
    UIBarMetricsDefault,  //竖屏
    UIBarMetricsLandscapePhone,  横屏
} UIBarMetrics;

//设置在某个状态下segments的背景图片

[segment setTitleTextAttributes:dic forState:UIControlStateNormal];


NSString *const UITextAttributeFont;                       value: UIFont
NSString *const UITextAttributeTextColor;                 value: UIColor
NSString *const UITextAttributeTextShadowColor;       value: UIColor
NSString *const UITextAttributeTextShadowOffset;      value: NSValue wrapping a UIOffset
    
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor,[UIFont fontWithName:@"SnellRoundhand-Bold" size:24],UITextAttributeFont ,nil];  

//设置标题的颜色 字体和大小 阴影和阴影颜色

[segment addTarget:self action:@selector(change:) forControlEvents:UIControlEventValueChanged];

//当选中不同的segment时,会执行change:方法

 

 

UISegmentedControl分段控件代替了桌面OS上的单选按钮。不过它的选项个数非常有限,因为你的IOS设备屏幕有限。当我们需要使用选项非常少的单选按钮时它很合适。

一、创建

UISegmentedControl* mySegmentedControl = [[UISegmentedControl alloc]initWithItems:nil];

是不是很奇怪没有指定位置和大小呢?没错,我确实在他的类声明里只找到 initWithItems 而未找到 initWithFrame ,所以他不需要指定,不过我看到了另一个方法,这个方法可以设置Item的宽度:

  1. mySegmentedControl setWidth:100 forSegmentAtIndex:0];//设置Item的宽度

二、属性

  1. mySegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;//风格

可以视使用的场合,有三种风格选择,如下:

  1. typedef enum {
  2. UISegmentedControlStylePlain,     // large plain 有灰边的大白按钮,适合偏好设置单元
  3. UISegmentedControlStyleBordered,  // large bordered 黑边的大白按钮,适用于表格单元
  4. UISegmentedControlStyleBar,       // small button/nav bar style. tintable 小按钮,适合导航栏
  5. UISegmentedControlStyleBezeled,   // large bezeled style. tintable
  6. } UISegmentedControlStyle;

如果你使用的是 UISegmentedControlStyleBar 风格,还可以用空间的 tintColor 属性为整个控件设置渲染色彩:

  1. UIColor *myTint = [[ UIColor alloc]initWithRed:0.66 green:1.0 blue:0.77 alpha:1.0];
  2. mySegmentedControl.tintColor = myTint;

三、添加、删除片段

每个分段控件的片段都是一个按钮,其中包含一个标签或图片。你需要在你的控件中为每个控件创建一个片段。只要屏幕放得下,就可以有许多片段,但用户同一时刻只能选择一个片段。

  1. [mySegmentedControl insertSegmentWithTitle:@"First" atIndex:0 animated:YES];
  2. [mySegmentedControl insertSegmentWithTitle:@"Second" atIndex:2 animated:YES];

每个
按钮都被赋予一个索引,用这个索排序以及标识。
你也可以添加一个含有图像的片段,用inserSegmentWithImage

  1. [mySegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"pic"]  atIndex:3 animated:YES];

删除片段

  1. [mySegmentedControl removeSegmentAtIndex:0 animated:YES];//删除一个片段
  2. [mySegmentedControl removeAllSegments];//删除所有片段

四、片段标题

  1. [mySegmentedControl setTitle:@"ZERO" forSegmentAtIndex:0];//设置标题
  2. NSString* myTitle = [mySegmentedControl titleForSegmentAtIndex:1];//读取标题

五、图像

每个分段也可以设置图像:

  1. [mySegmentedControl setImage:[UIImage imageNamed:@"pic"] forSegmentAtIndex:1];//设置
  2. UIImage* myImage = [mySegmentedControl imageForSegmentAtIndex:2];//读取

注意:图像不会自动调整大小,图片多大就会原生地显示多大,所以你要通知做图的美工大小要精确。
六、选中分段

分段控件的默认行为是,一旦按钮被选中就一直保持,直到另外一个按钮被选中为止。你可以改变这种默认的行为,变成按钮按下后很快就自动释放。将控件的momentary属性设为YES:

  1. mySegmentedControl.momentary = YES;

注意:开启这个功能后点触片段不会更新 selectedSegmentedIndex,因此也就无法通过这个属性得到当前选取的片段。

初始化默认片段

默认情况下,除非你指定,否则不会有任何片段被选中。要设置 selectedSegmentedIndex 属性:

  1. mySegmentedControl.selectedSegmentedIndex = 0;

七、显示控件

  1. [parentView addSubview:mySegmentedControl];//添加到父视图
  2. self.navigationItem.titleView = mySegmentedControl;//添加到导航栏

八、读取控件

通过 selectedSegmentedIndex 属性,可以读取当前选中分段的值,这个值就是选中片段的索引号。

  1. int x = mySegmentedControl. selectedSegmentedIndex;

九、通知

要接收片段选取的通知,可以用UIControl类的 addTarget 方法,为 UIControlEventValueChanged 事件添加一个动作:

  1. [mySegmentedControl addTarget:self action:@selector(selected:) forControlEvents:UIControlEventValueChanged];

只要选中了一个片段,你的动作方法就会被调用:

  1. -(void)selected:(id)sender{
  2. UISegmentedControl* control = (UISegmentedControl*)sender;
  3. switch (control.selectedSegmentIndex) {
  4. case 0:
  5. //
  6. break;
  7. case 1:
  8. //
  9. break;
  10. case 2:
  11. //
  12. break;
  13. default:
  14. break;
  15. }
  16. }

ios之UISegmentedcontol的更多相关文章

  1. iOS可视化动态绘制连通图

    上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...

  2. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  4. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  5. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  6. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  7. 告别被拒,如何提升iOS审核通过率(上篇)

    iOS审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬.那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率 ...

  8. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  9. Summary of Critical and Exploitable iOS Vulnerabilities in 2016

    Summary of Critical and Exploitable iOS Vulnerabilities in 2016 Author:Min (Spark) Zheng, Cererdlong ...

随机推荐

  1. GitHub使用方法(初级)

    [初识Github] Git 是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.目 ...

  2. log4j和log4j2怎么动态加载配置文件

    应用场景与问题 当项目在运行时,我们如果需要修改log4j 1.X或者log4j2的配置文件,一般来说我们是不能直接将项目停止运行再来修改文件重新部署的.于是就有这样一个问题:如何在不停止当前项目的运 ...

  3. UWP Popup 弹出提示框

    一:需求 做一个类似于安卓的弹出消息框,如图.当用户点击下载或者选择时,能够从底部弹出一个提示框,用于提示用户. 二:Popup 类 不需要我们自己额外去写一个弹窗类,微软自己有一个Popup 弹窗类 ...

  4. bat脚本启动Burp

    我的burp点击之后并不会直接打开,需要用命令启动,所以在网上找了一下快捷启动的方法. ①新建一个文本文档,输入start javaw -jar “burp路径”, ②另存为***.bat,文件类型选 ...

  5. 删除cookie时遇到的坑

    曾经有个“导出中”的需求,我用iframe实现下载对话框和cookie轮询验证token去解决的,但是昨天又发现了一个新问题: 因为前台需要提示导出失败的详细信息,这个信息我是在token返回0的时候 ...

  6. c指针参数常见错误

    参数的地址是可以修改的,修改后的地址是不可能传回给调用处的指针变量.也就是说,可以修改参数地址所指的单元的值,这是可以传回到调用处的变量里面的. #include <stdio.h> #i ...

  7. Spark Mllib里如何将数据集按比例随机地分成trainData、testData和validationData数据集(图文详解)

    不多说,直接上干货! 具体详情见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第11章 电影推荐引擎

  8. 一些API

    /** * Goto the specified frame index, and pause at this index. * @param startIndex The animation wil ...

  9. 需求管理是CMM可重复级中的6个关键过程域之一,其主要目标是__________。A.客观地验证需求管理活动

    需求管理是CMM可重复级中的6个关键过程域之一,其主要目标是__________.A.客观地验证需求管理活动       需求管理是CMM可重复级中的6个关键过程域之一,其主要目标是_________ ...

  10. 头部和信号栏一个颜色appcloud

    <header id="header" > <ul > <li class="active" onclick="api. ...