iPhone开发秘籍--通过警告直接与用户对话

 

可以通过UIActionSheet和UIAlertView对象与用户对话。它们通过弹出或在其他视图上方滚动来发送消息。这些轻量级类向应用程序中添加双向对话。警告直观地与用户"对话"并且可以提示用户回答。应用程序在屏幕上显示警告,获取用户确认,然后关闭警告继续进行其他任务。

如果你认为警告只不过是附带OK按钮的消息(如图4-1所示),那么这样的结论值得反思。UIAlertSheet对象提供了丰富的功能(假设苹果公司继续让你访问这些丰富的功能)。借助警告表,你可以实际构建菜单、文本输入、查询以及更多内容。遗憾的是,此行为多半都被归类为文档中未记录或几乎未记录的类别。在本章的秘诀中,你将了解如何创建可以在自己程序中使用的各种实用的警告。

本章中涉及的大部分功能已从正式的SDK中删除,但在公共框架中仍然存在。由于本章更多地依赖于"非正式"调用,因此应该找到可靠性和功能之间的最佳平衡点。苹果公司不鼓励开发人员使用私有例程,因为开发人员会随意更改这些例程。但其本质与Mac OS X相同。如果你知道如何在公共架构中使用私有例程的方法,则可以使用它们。在应用程序中访问私有框架则是错误的做法。

说明 在早期版本的iPhone固件中,UIActionSheet和UIAlertView实际上由相同的UIAlertSheet类实现。该类不仅提供弹出警告,而且还提供菜单功能。然后苹果公司将警告表替换为UIModalView,并对来自该基类的这些新对象进行子类化。之后,苹果公司删除了UIModalView,在新版本的SDK中,UIActionSheet和UIAlertView不再由此类派生。(它们都来自于UIView。)与其前身一样,它们在行为方面仍然属于同类,并且使用相似的底层技术在屏幕上呈现自己。

记录结果

由于printf非常简单,因此大部分秘诀都使用printf以可以查看的格式输出它们的结果。在最初的SDK Beta版本期间,printf提供了检查内部程序数据的最可靠的方法。现在,在最新的iPhone SDK版本中,NSLog()得到了完全实现,并且非常稳定。此外,下面给出了几个实用的技巧。

重定向stderr

标准的freopen()函数将stderr输出重定向到你选择的日志文件,为其指定一个本地路径。此处,logPath是一个标准的NSString(如@"/tmp/mylog"),它已被转换为本地文件系统表示。完成此调用之后,所有stderr结果(包括NSLog)将直接进入你的日志文件。当你的程序运行时,使用"w"(写)而不是使用"a"(附加)来重新启动日志:

构建自定义日志函数

构建你自己的日志函数,可以添加除标准NSLog之外的功能。下面是模拟NSLog功能的一个基本日志函数。通过此函数,可以方便地生成警告通知或文本视图更新,而不必输出到stderr:

构建警告

若要创建警告表,请分配一个UIAlertView对象。通过初始化为其分配一个标题、一个按钮数组和若干其他选项。该标题是一个NSString,按钮数组包含多个NSString,其中每个字符串表示一个按钮。代码清单4-1创建了一个非常简单的警告,如图4-1所示。

使用警告时,通常空间非常珍贵。将所有按钮放在一行上可以最大程度地减小警告高度,并且这也是默认表示。当定义更多按钮时,它们会一个挨一个地添加到该行中。因此,任何时候都要将添加的按钮数量限制为不超过3个或4个。按钮越少,效果越好,最好只有一两个。

UIAlertView对象没有提供可视的"默认"按钮突出显示。在iPhone上下文中,按钮突出显示不但不能提供帮助,而且还容易造成混淆。(例如,用户应该按浅色按钮还是深色按钮?)没有办法使界面符合用户期望,因为此表示不明确。因此,与OS X不同的是,苹果公司在较新的iPhone固件中删除了突出显示。

说明 Cancel按钮出现在菜单的底部,并且位于弹出警告的左侧。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值