4.3秘诀:自动计时的无按钮警告
无按钮警告提出了一个特殊的挑战,原因是它们无法正确地回调委托方法。它们无法自动关闭,即使在轻击时也是如此。图4-3显示了一个简单的无按钮警告。从此屏幕快照中可以看出,删除按钮会使警告看起来比较笨拙。你可以通过调整消息文本来改进此显示。添加回车(@\),通过顶部的空间来平衡底部(正常情况下是按钮所在的位置)。
图4-3使用文档中未记录的dismiss方法在显示一个无按钮的UIAlertView之后,将控制返回你的程序。在message属性中添加回车有助于平衡底部因缺少按钮而多出来的空间
由于警告以模态方式运行,因此你需要通过一项安全措施来确保警告在特定时间点消失,并且用户可以继续使用他们的iPhone。一个简单的NSTimer可在一段时间(必须将控制返回到标准GUI的时间段)之后关闭警告。秘诀4-2创建了一个警告并使用计时器将其关闭,要么使用文档中未记录的dismiss方法,要么使用UIAlertView类的
dismissWithClickedButtonIndex:animated:方法。
秘诀4-2创建带计时器自动防故障装置的无按钮UIAlertView
4.4秘诀:请求用户的文本输入
暂且将正式SDK调用放在一边,警告视图还提供了一个非常简单的方法,用于提示用户输入文本。UIAlertView类提供显示和关闭关联键盘的全部命令。你只需要添加文本输入字段,告诉警告如何处理它们,以及让它注意其他事项。
若要添加文本字段,请使用文档中未记录的addTextFieldWithValue:label:调用。将默认文本作为第一个参数,将otherwiseempty字段中显示的文本作为第二个参数传递给该调用。图4-4显示了已填充字段和空字段。
图4-4细致地管理空间并忽略标题和正文文本,你一次最多可向
UIAlertSheet中添加3个文本输入字段。你可能希望将UIAlertSheets限制为1个或2个文本字段
你可以通过调用[alerttextFieldAtIndex:0],然后从带text属性的文本字段获取文本来恢复每个字段。由于每个字段都是可寻址的,因此你可以在显示警告之前设置其属性。自定义自动标题、自动纠正以及首选的键盘,如秘诀4-3所示。
空间非常重要。如果要细致地管理空间,你可以将警告放在屏幕上,同时留出足够的空间用于键盘显示。通过跳过标题和正文文本,你可以一次在屏幕上放置3个(而不是4个)文本输入字段。两个字段是符合实际的最大值,如图4-4所示。
秘诀4-3使用UIAlertView请求用户的文本
4.5秘诀:显示简单菜单
谈到菜单,UIActionSheet实例可满足iPhone的需要。它
们将选择对象(主要是表示可能操作的按钮列表)滑动到屏幕上并且等待用户响应。操作页不同于弹出菜单。弹出菜单与界面相分离,并且比较适合用于请求注意。菜单滑入视图中,并且可以更好地与当前应用程序工作集成。CocoaTouch提供了两种显示菜单的方法。
lshowInView。在视图中显示表是使用菜单的理想方式,此处使用的就是这个方法。该
方法将视图底部的菜单向上滑动(参见图4-5)。
lshowFromToolBar:和showFromTabBar。在使用工具栏、选项卡栏或提供水平分组按钮
的任何其他栏(在很多应用程序的底部你可以看到这些栏)时,这些方法将该菜单与栏顶部对齐并且完全滑出它原来所在的位置。
秘诀4-4显示了初始化和显示简单的UIAction-Sheet实例的方法。它的初始化方法引入了一个UIAlertView:破坏性按钮中缺少的概念。红色的破坏性按钮表示没有返回的操作,如永久删除某个文件(参见图4-5)。明亮的红色向用户发出关于这个选择的警告。很明显,该选项应该谨慎使用。
说明操作表缺少的就是UIAlertView的消息(至少对于正式SDK是如此)。除了显示标
题之外,操作表实例未正式支持添加消息。实际上,消息虽然得到了实现,但效果却不是非常理想。使用文档中未记录的setMessage:调用向菜单中添加消息。使用时,消息显示在表标题下方,文本稍微有点大。秘诀4-4显示菜单
4.6“请稍候”:向用户显示进度
等待是计算体验中固有的一部分,在可预见的将来仍然如此。作为一名开发人员,将这个事实告诉用户是你的工作。CocoaTouch提供了许多类,用于通知用户等待进程完成。这些进度指示器采用两种形式:进度轮,它在其演示期间一直存在;进度条,在整个进程中,它从左侧向右侧填充。提供这些指示的类如下所示。
lUIActivityIndicatorView。该进度指示器提供一个旋转的圆,通知用户等待,而不提供有关其完成程度的具体信息。iPhone活动指示器非常小,但它的活动动画会吸引用户的眼球并且最适合用于正常应用程序中的快速中断。
lUIProgressView。该视图显示一个进度条。该条提供有关已经完成的工作量以及剩余但仍然占用相对较小数量的屏幕空间的工作量的具体反馈。它显示为一个狭长、水平的矩形,随着进度的前进它从左向右填充。这种经典的用户界面元素对于长时间延迟来说效果最佳,因为在这期间用户想知道作业已经完成了多少。从文档中未记录的特性的角度来看,你拥有以下内容。
lUIProgressHUD。文档中未记录的“小心显示”版本的进度指示器浮在窗口中的所有其他视图上方,并且向基本进度指示器添加一个状态消息。HUD在进度条和简单指示器之间提供一个中间立场。你不需要采用进度条的方式量化你的进度,但可以利用关联文本描绘进度。当你想指出伴随某个进程所发生的情况时,进度HUD工作特别好(例如,“联系服务器”、“身份验证”、“请求数据”等)。