《iOS 6核心开发手册(第4版)》——2.8节秘诀:创建可点按两次的分段控件
本节书摘来自异步社区《iOS 6核心开发手册(第4版)》一书中的第2章,第2.8节秘诀:创建可点按两次的分段控件,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.8 秘诀:创建可点按两次的分段控件
iOS 6核心开发手册(第4版)
UISegmentedControl类表示一个多按钮的界面,其中用户可以从一组按钮中做出选择。该控件提供了两种使用风格。在正常的单选按钮风格模式下,一旦选择了一个按钮,就会保持选择它。用户可以点按其他的按钮,但是他们不能通过重新点按他们现有的选择来生成新的事件。另一种瞬时的风格允许用户根据需要点按每个按钮许多次,但是不存储关于当前所选项目的状态。它不会突出显示最近的选择。
秘诀2-4构建了一种混合方法。它允许用户查看他们当前选择的选项,以及根据需要重新选择该选项。这并不是分段控件正常的工作方式。不过,有时你可能希望通过重新选择生成一个新的结果(比如在瞬时模式下),同时形象地显示最近的选择(比如在单选按钮模式下)。
不幸的是,用于创建这种想要的行为的“明显的”解决方案不会工作。不能添加用于检测UIControlEventTouchUpInside的目标—动作对。UIControlEventValueChanged是由UISegmented Control实例生成的唯一控件事件(可以通过为触摸事件添加目标—动作对,自己轻松地对此进行测试)。
此时,子类化就可以派上用场了。基于UISegmentedControl创建新类相对比较简单,它不会响应第二次点按。秘诀2-4定义了该类。其代码的工作方式是:检测何时发生了触摸,独立操作分段控件的内部触摸处理程序,它们是从UIControl子类化而得到的。
分段选项开关仍不会受影响;它们将继续更新,并在用户点按它们时来回进行切换。与父类不同的是,在已经触摸过的分段控件上进行触摸将会继续做某件事情。在这种情况下,它们将请求对象的委托产生performSegmentAction方法。
不要像通常所做的那样给分段控制器添加目标—动作对。由于所有的按下事件都会被检测到,用于值改变事件的目标—动作将会添加第二个回调,并且无论何时切换分段控件,它都会触发两次。可代之以实现委托回调,并且允许对象委托处理更新。
2.8.1 第二次点按反馈
当在已经选择的分段上检测到第二次点按时,分段控件本身不会提供任何有意义的反馈。再次点按分段(在默认的外观表示中以蓝色显示)将使分段保持为蓝色和选定状态,并且不会改变。除了在控件外观创建某种其他的视觉更新之外(比如更改导航栏中的标题),用户将不会意识到他们的第二次点按已经影响了界面。
要解除这种限制,可以滚动你自己的反馈。UIKit的文本特性(最初是在iOS 5.x中引入的)极好地应对了这种挑战。分段控件基于状态提供可选的属性。setTitleTextAttributes:forState:方法允许引入一种受限于所选分段的视觉效果。
秘诀2-4使用这种方法在点按分段时把所选的文本颜色从白色改为淡灰色,并当触摸结束时在交互的末尾对更改进行复位。每次用户点按一个分段时,代码就会在该触摸的持续时间内更新所选分段的文本颜色,并添加所需的反馈,以便获得更好的用户体验。
2.8.2 控件和属性
在iOS 6中,许多UIKit类(包括文本框、文本视图、标签、按钮和刷新控件)现在允许把属性化(Core Text风格)的字符串分配给它们的文本和标题属性:
[myButton setAttributedTitle:attributedString forState:UIControlStateNormal]
此外,iOS现在还提供了特定于UIKit的文本属性(比如字体、颜色和阴影)的新(且小)的词汇表。它们用于导航栏、分段控件和栏项目(即栏风格的元素)。可以调用setTitleTextAttributes:(导航栏)和setTitleTextAttributes:forState:(分段控件和栏项目)来设置属性。使用下列字典键和值传递属性字典。
UITextAttributeFont——提供一个UIFont实例。
UITextAttributeTextColor——提供一个UIColor实例。
UITextAttributeTextShadowColor——提供一个UIColor实例。
UITextAttributeTextShadowOffset——提供一个包装UIOffset结构的NSValue实例。偏移量包括两个浮点值:水平方向和垂直方向。使用UIOffsetMake()通过一对浮点值构造该结构。
例如,这个秘诀把分段控件的所选状态设置为淡灰色。无论何时选择控件,文本颜色都会从白色变为灰色。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《Android 开发入门与实战(第二版)》——6.1节什么是Activity
本节书摘来自异步社区《Android 开发入门与实战(第二版)》一书中的第6章,第6.1节什么是Activity,作者eoe移动开发者社区 组编 , 姚尚朗 , 靳岩,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.1 什么是ActivityAndroid 开发入门与实战(第二版)Activity是Android四大组件之一,也是Android中最基本的模块之一。在官网中是这样介绍Activity的。 几乎所有的的Activity都是用来与用户交互的,因此Activity主要关注于视图窗体的创建(你可以通过setContentView(View)方法来放置你的UI),而且Activity对于用户来说通常都表现为全屏的窗体,当然,它们也能以其他的方式呈现,比如浮动窗体。 通俗一点来讲,我们可以把手机比作一个浏览器,那么Activity就相当于一个网页。在Activity中,我们可以添加不同的View,并且可以对这些View做一些事件处理。例如,在Activity中添加button、checkbox等元素。因此,Activity的概念在某种程度上和网页的概念是相当类似的。网页对于一...
- 下一篇
《Android 开发入门与实战(第二版)》——6.2节Activity的生命周期
本节书摘来自异步社区《Android 开发入门与实战(第二版)》一书中的第6章,第6.2节Activity的生命周期,作者eoe移动开发者社区 组编 , 姚尚朗 , 靳岩,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.2 Activity的生命周期Android 开发入门与实战(第二版)Activity的重要性在Activity介绍中已经大概描述了,为了更好地使用Activity,接下来我们介绍一下Activity的生命周期。 在讲Activity生命周期之前,我们先看图6-1(Activity的生命周期)。 从图6-1中我们可以看到Activity的生命周期其实就是由以下函数组成的。 public class Activity extends ApplicationContext{ protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装