iPhone应用程序编程指南(文本和Web)
关于文本和Web的支持
文本视图
UIKit框架提供三个显示文本内容的基本类:
UILabel
显示静态文本字符串UITextField
显示单行可编辑文本UITextView
显示多行可编辑文本
虽然标签和文本编辑框通常用于显示相对少量的文本,但实际上这些类可以显示任意数量的文本。
在使用可编辑的文本视图时,您必须提供一个委托对象,负责管理编辑会话。文本视图会向委托对象发送几个不同的通告,让它知道编辑何时开始,何时结束,并使它有机会重载某些编辑动作。
Web视图
除了显示内容,您还可以用web视图对象来显示web表单,收集用户输入。和UIKit的其它文本类相似,如果您在web页面的表单中有可编辑的文本框,则轻触该文本框就会弹出键盘,用户可以通过键盘输入文本。这是web浏览整体体验的一部分,web视图会自行管理键盘的显示和消除。
web视图通过其关联的委托对象提供有关网页何时被装载、及装载过程是否发生错误的信息。web委托是指实现一个或多个UIWebViewDelegate
协议方法的对象。您可以通过实现委托方法来响应装载错误或处理一些与装载有关的其它任务。
键盘和输入法
每当用户触击一个可以接受文本输入的对象时,该对象就会请求系统显示一个合适的键盘。根据用户程序的需要和偏好的语言,系统可以显示几种不同的键盘。您的应用程序虽然不能控制用户的偏好语言(因此也不能控制键盘的输入法),但可以控制键盘的使用属性,比如特殊键的配置及其行为。
您可以直接通过应用程序中的文本对象来配置键盘的属性。UITextField
和UITextView
类都遵循UITextInputTraits
协议,该协议定义了一些配置键盘的属性。在程序或Interface Builder的查看器窗口中设置这些属性就可以使系统显示指定类型的键盘。
请注意:虽然UIWebView
类并不直接支持UITextInputTraits
协议,但您还是可以配置文本输入元素的一些键盘属性。特别值得一提的是,您可以在输入元素的定义中包含autocorrect
和autocapitalization
属性,通过这些属性来指定键盘的行为,如下面的例子所示:
<input type="text" size="30" autocorrect="off" autocapitalization="on"> |
您不能在输入元素中指定键盘的类型。web视图显示的是缺省的键盘,但包含一些额外的控制,可以进行表单元素之间漫游。
管理键盘
接收键盘通告
当键盘被显示或隐藏的时候,iPhone OS会向所有经过注册的观察者对象发出如下通告:
UIKeyboardWillShowNotification
UIKeyboardDidShowNotification
UIKeyboardWillHideNotification
UIKeyboardDidHideNotification
当键盘首次出现或者消失,以及键盘的所有者或应用程序的方向发生变化的任何时候,系统都会发出键盘通告。
在上述的各种情况下,系统只发送与具体场景相关的的消息集合。举例来说,如果键盘的所有者发生变化,系统只向当前的拥有者发送UIKeyboardWillHideNotification
消息,但不发送UIKeyboardDidHideNotification
消息,因为这个变化不会导致键盘最终被隐藏。UIKeyboardWillHideNotification
消息只是简单地通知键盘当前的所有者即将失去键盘焦点。而改变键盘的方向则会使系统发出上述的两种消息,因为每个方向的键盘是不同的,在显示新的键盘之前,必须先隐藏原来的键盘。
每个键盘通告都包含键盘在屏幕上的位置和尺寸。您应该使用通告中的信息来确定键盘的尺寸和位置,而不是假定键盘具有某个特定的尺寸或处于某个特定的位置。
图5-5 在肖像模式和景观模式下的相对键盘尺寸
请注意:info字典中的UIKeyboardBoundsUserInfoKey
键包含的矩形只能用于取得尺寸信息,不要将该矩形的原点(它的值总是为{0.0, 0.0})用于矩形计算。由于键盘是以动画的形式出现在它的位置上的,其实际的边界尺寸会随着时间的不同而不同,因此,info字典中有UIKeyboardCenterBeginUserInfoKey
和UIKeyboardCenterEndUserInfoKey
两个键,用于保存键盘的起始和终止的位置,您可以根据这些位置计算出键盘的原点。
使用键盘通告的一个原因是为了重新定位被键盘遮掩的内容。
显示键盘
当用户触击一个视图时,系统就会自动将该视图作为第一响应者。而当这种场景发生在包含可编辑文本的视图时,该视图就会启动一个文本编辑会话。如果当前键盘不可见,该视图会在编辑会话刚开始时请求系统显示键盘。如果键盘已经显示在屏幕上了,第一响应者的改变会导致来自键盘的文本输入被重定向到用户刚刚触击的视图上。
键盘是在视图变为第一响应者时自动被显示的,因此,您通常不需要为了显示它而做什么工作。但是,您可以通过调用视图对象的becomeFirstResponder
方法来为可编辑的文本视图显示键盘。调用这个方法可以使目标视图成为第一响应者,并开始编辑过程,其效果和用户触击该视图是一样的。
如果您的应用程序在一个屏幕上管理几个基于文本的视图,则需要跟踪当前哪个视图是第一响应者,以便在需要的时候取消键盘的显示。
取消键盘
虽然键盘通常是自动显示的,但它并不自动取消。相反,您的应用程序需要在恰当的时机取消键盘。通常情况下,您在响应用户动作的时候进行这样的操作,比如当用户触击键盘上的Return或Done按键、或者触击应用程序界面上的其它按键时。根据键盘配置的不同,您可能需要在用户界面上加入额外的控件来取消键盘。
您可以调用作为当前第一响应者的文本视图的resignFirstResponder
方法来取消键盘。当文本视图失去第一响应者的状态时,就会结束其当前的编辑会话,将这个变化通知它的委托对象,并取消键盘。
移动键盘下面的内容
需要做的调整通常包括暂时调整一或多个视图的尺寸和位置,从而使文本对象可见。管理带有键盘的文本对象的最简单方法是将它们嵌入到一个UIScrollView
(或其子类,如UITableView
)对象。当键盘被显示出来时,您需要做的只是调整滚动视图的尺寸,并将目标文本对象滚动到合适的位置。为此,在UIKeyboardDidShowNotification
通告的处理代码中需要进行如下操作:
取得键盘的尺寸。
将滚动视图的高度减去键盘的高度。
将目标文本框滚动到视图中。
图5-6演示了一个简单的应用程序如何处理上述的几个步骤。
该程序将几个文本输入框嵌入到UIScrollView
对象中,当键盘出现时,通告处理代码首先调整滚动视图的尺寸,然后用UIScrollView
类的scrollRectToVisible:animated:
方法将被触击的文本框滚动到视图中。
图5-6 调整内容的位置,使其适应键盘
UIView
对象的子视图,该UIView对象又是UIScrollView
对象的子视图。如果该UIView对象的UIViewAutoresizingFlexibleWidth
和UIViewAutoresizingFlexibleHeight
选项被设置了,则改变滚动视图的边框尺寸会同时改变它的边框,因而可能导致不可预料的结果。禁用这些选项可以确保该视图保持尺寸不变,并正确滚动。
描画文本
除了显示和编辑文本的UIKit类之外,iPhone OS还包含几个直接在屏幕上描画文本的方法。描画简单字符串的最简单有效的方法是使用NSString
类的UIKit扩展,该扩展包含一些在屏幕上描画字符串的方法,并且可以描画时使用多种属性。还有一些方法,可以在真正描画之前计算渲染字符串所需要的尺寸,这些方法有助于更加精确布局应用程序的内容。
重要提示:由于性能上的考虑,您应该尽可能避免直接描画文本。对于静态文本,通过一或多个UILabel
对象进行描画比使用定制描画例程要高效得多。类似地,UITextField
类也支持不同的风格,这些风格使您更加易于将可编辑的文本区域集成到您的内容中。
当您需要在界面上描画定制文本字符串时,请使用NSString
方法。UIKit包含一些对基本NSString
类的扩展,用于在视图中描画字符串。这些方法使您可以精确调整文本的位置,以及将文本和视图内容进行融合;这个类的方法还可以根据指定的字体和风格属性计算文本的包围矩形。更多信息请参见NSString UIKit扩展参考。
如果您需要对描画过程中用到的字体有更多的控制,还可以使用Core Graphics框架中的函数来进行描画。Core Graphics框架提供的方法可以对字形和文本进行精确描画和定位。有关这些函数及其用法的更多信息,请参见Quartz 2D编程指南和Core Graphics框架参考。
在Web视图中显示内容
对于本地的内容,您可以动态创建,也可以使用文件,然后调用loadData:MIMEType:textEncodingName:baseURL:
或loadHTMLString:baseURL:
方法;
如果要从网络加载,则需要创建一个NSURLRequest
对象,然后传递给web视图对象的loadRequest:
方法。
在发起一个基于网络的请求后,如果由于某种原因必须释放web视图,则必须在释放之前取消待处理的请求。为此,您可以调用web视图的stopLoading
方法。通常情况下,您可以在web视图的视图控制器的viewWillDisappear:
方法中执行这些代码。如果需要确定一个请求是否处于等待状态,可以通过web视图的loading
属性来判断。
转载于:https://www.cnblogs.com/Piosa/archive/2012/02/14/2350260.html
iPhone应用程序编程指南(文本和Web)相关推荐
- iPhone应用程序编程指南
介绍 请注意:本文档之前命名为iPhone OS编程指南. iPhone SDK为创建iPhone的本地应用程序提供必需的工具和资源.在用户的Home屏幕上,iPhone的本地应用程序表示为图标.它们 ...
- (转)---iPhone应用程序编程指南
请注意:本文档之前命名为iPhone OS编程指南. iPhone SDK为创建iPhone的本地应用程序提供必需的工具和资源.在用户的Home屏幕上,iPhone的本地应用程序表示为图标.它们和运行 ...
- iPhone应用程序编程指南(图形和描画)
iPhone OS为创建高质量的图形提供两种路径:即通过OpenGL进行渲染,或者通过Quartz.Core Animation.和UIKit进行渲染. UIKit的图形系统 在iPhone OS上, ...
- iPhone应用程序编程指南(窗口和视图)
窗口和视图 窗口为内容显示提供背景平台,而视图负责绝大部分的内容描画,并负责响应用户的交互. 什么是窗口和视图? UIWindow的作用 iPhone应用程序通常只有一个窗口,表示为一个UIWindo ...
- iPhone OS编程指南(一)
原文地址:iPhone OS编程指南(一)作者:若水一叶 介绍 请注意:本文档之前命名为iPhone OS编程指南. iPhoneSDK为创建iPhone的本地应用程序提供必需的工具和资源.在用户的H ...
- iPhone编程指南学习笔记
为什么80%的码农都做不了架构师?>>> UIWindow 在创建应用程序窗口时,您应该总是将其初始的边框尺寸设置为整个屏幕的大小.如果您的窗口是从nib文件装载得到,Inte ...
- 渐进式web应用程序_渐进式Web应用程序终极指南
渐进式web应用程序 Progressive Web Apps, aka PWAs, are the best way for developers to make their webapps loa ...
- wii homebrew 程序编程入门指南
wii homebrew 程序编程入门指南 请尊重原作者的劳动成果,转载请注明出自A9VG和原作者Silenceburn! 本人水平有限,难免错漏,欢迎各路高手拍砖指正,非常感谢! Chapter 1 ...
- 苹果程序员推出小学生编程指南、网友:脱发从娃娃抓起?
步入人工智能时代,电子产品已经成为了孩子们生活中的一部分,少儿编程也逐渐走进大众视野. Java交流群:785794074[暗号67]里面有大佬.项目.感兴趣的程序员们可以加入一起讨论学习及进步哦! ...
最新文章
- 使用Spring Boot 2通过OAuth2和JWT进行集中授权
- UVA 10410——Tree Reconstruction
- 【JAVA基础篇】集合框架
- python中代理模式分为几种_通俗 Python 设计模式——代理模式
- 【Mybatis-Plus】(一)初识Mybatis-Plus 入门案例
- android版 点击下载,自动点击器最新版
- JQuery 获得绝对,相对位置的坐标方法
- MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!
- 服务器操作记录21/11/19
- 计算机统计分析spss试卷,《SPSS计算机统计分析方法》习题A卷.doc
- 宾馆酒店客房管理系统java源码
- android toast居中显示_Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明...
- 屈原与司马迁的对话--理想主义与辩证法
- 计算机应用基础时间,《计算机应用基础》考试时间安排
- php pthread nts,PHP的线程库:pthreads
- 技术干货 | 实现模型透明化的有效技术:MindSpore可解释AI能力
- 中科院计算所培训中心二季度公开课安排
- 基于Python批量去水印优化批量OCR的质量
- es - elasticsearch - aggs - metrics - rate
- Python如何写出一个自动弹钢琴脚本,轻松弹奏出歌曲
热门文章
- git 获取最新代码_程序员必知:这是一份全面 amp; 详细的 Git与Github 介绍指南
- Java工作笔记-webService发布时通用的4个注解
- Python笔记-内置装饰器
- Qt creator5.7 OpenCV249之均值滤波(含源码下载)
- python在多个组中选一组_python-使用 pandas 在每个groupby组的列中选择最大的N
- 谷歌android go 销量,谷歌Android Go进入尴尬期:目前仅十多个App专门适配
- Retroifit原理
- 纳米颗粒C语言数值模拟_J.Hazard. Mater.当“金属纳米酶”邂逅“重金属离子”:机遇与挑战...
- 数据结构之外部排序:归并排序法
- Linux系统编程6:入门篇之如何拿下gdb调试器?来和我一起调试一个程序