有效地继承标准Cocoa控件

Bar*_*obs 7 cocoa controls

尽管有人机界面指南文档(HIG),但许多高质量的Mac桌面应用程序都使用自定义控件.我的问题是,为Cocoa开发创建子类控件的最佳方法是什么?令我惊讶的是,这个主题的信息很少(好).最好遵循什么样的路径,这样你就不会有一个好的但是一半的控制?

Pet*_*sey 32

这是一份清单:

  • 确保您的控件在双倍分辨率下正常工作.使用Quartz Debug来测试它.您将要测试绘图完整性(在所有状态 - 正常,选定,按下,禁用和其他任何状态)和操作健全性(测试匹配屏幕/其他目标设备上出现的事物).
  • 要获得额外的功劳,请确保您的控件在1.5(或其他类似的非整数)分辨率下正常工作.
  • 单击时测试标准控件的工作方式.无论如何你可能会这样做.像标准控制那样做.
  • 半按时测试标准控件的工作原理(鼠标向下,鼠标向外).
  • 测试标记控件在黑暗侧面(鼠标向下,鼠标向内)时的工作原理.
  • 测试标准控件在内部拖动时的工作方式.
  • 使用其他鼠标按钮(右侧和中间)测试以上四个.
  • 使用滚轮滚动时,测试标准控件的作用.还可以测试shift + scroll,并在带有它们的鼠标上(例如,大多数Logitech鼠标),向左/向右滚动按钮.
  • 测试双轴在每个轴和两个轴上滚动时标准控件的作用.
  • 测试标准控件在捏合和取消缩放时的作用.
  • 测试每个轴上用三个和四个手指滑动时标准控件的功能.
  • 测试标准控件如何在"全键盘访问"打开的情况下工作.你可以加入它吗?你能用空格键按吗?你能用返回键输入吗?你可以选择它吗?
  • 测试标准控件如何响应辅助功能查询.使用辅助功能检查器.有关响应控件中的辅助功能查询和消息的信息,请参阅Cocoa辅助功能编程指南.
  • 在VoiceOver中测试您的应用程序 - 包括但不限于您的自定义控件.蒙上眼睛,尝试单独使用VoiceOver应用程序.
  • 如果适用,请测试打印视图.如果您不想为开发过程杀死树,则可以打印到"预览".
  • 以其他纸张尺寸测试打印.如果你在美国,请测试A4; 否则,测试美国信.如果您感觉彻底,还可以测试其他纸张尺寸(例如Legal和A3).
  • 如果您正在实现一个滚动条(您很差),请测试您的滚动条在"系统偏好设置"的"外观"窗格中正确响应"跳转到(下一页|点击的地点)"首选项."正确"意味着它应该做用户选择的.
  • 确保它正确实现所有四个滚动箭头位置设置:每端一个(Mac风格),左下端(NeXT样式),上/右端,两端(电源)用户风格).与往常一样,您需要正确绘制和正确测试/反应.(由@radiofreelunch/David Dunham建议)
  • 此外,如果您正在实现滚动条,请确保它正确响应"平滑滚动"首选项.
  • 测试它是否正确响应不同的滚动速度首选项.
  • 如果您正在实现某种文本输入字段,或任何响应某种特殊热键的视图(如输入以在输入行中发送消息),请测试从右到左(希伯来语/阿拉伯语)的文本输入和备用输入法.角色查看器是一个好的开始.
  • 另外,测试你不要破坏ctrl-q.例如,ctrl-q,tab应始终输入制表符.选项+(键)通常也是如此,例如输入行中的选项返回.
  • 测试它是否正确响应不同的键重复首选项.
  • 如果您通过Cocoa的标准菜单快捷方式处理以外的方式实现任何自定义键盘快捷键(⌘+零个或多个其他修饰符+一个或多个字符键),请在Dvorak下测试自定义快捷键行为.没有更快的方法来消除我们对您的应用的看法,而不是通过退出来响应⌘'.
  • 向以前从未使用过它的用户展示你的应用程序,也不要看过任何模型.取消程序员的资格.如果他们不认识你的控制(无论它应该是什么),重新设计它.如果你曾经说过"滚动器在这里"或"你需要点击那个",你就会立即失败.
  • 当您的应用处于后台时,测试您的控件是否响应(或者如果响应是危险的则不响应).(建议@chucker.)
  • 测试您的控件是否响应,但是当您的应用程序在后台并且用户使用⌘键向下点击它时,不会将应用程序转发.(建议@chucker.)
  • 测试调整视图的大小.除此之外,这将确保您正确设置自动调整大小.你也在寻找绘制错误 - 扭曲元素,间隙等等(@Bagelturf建议的部分内容.)
  • 如果您的控件实际上是一个控件,请发送它sizeToFit并确保它做对了.(建议@Bagelturf.)
  • 如果使用鼠标坐标,请不要认为它们是整数.确保正确处理小数,零(正数和负数)和负数.(@Bagelturf建议的部分内容.)
  • 您还可以考虑将控件拆分为控件和单元格.在后一种情况下,还要对嵌入在NSMatrix和NSTableColumn中的单元格执行所有这些测试.
  • 如果您的控件有菜单,请测试当控件位于屏幕的一个或多个边缘时会发生什么.菜单应该移动到不会落在屏幕空间之外.
  • 如果您的控件有菜单,请在使用"全键盘访问"时测试用户是否可以使用向下箭头键输入该菜单.如果它也是一个文本字段(如组合框),请测试只有当用户按下文本末尾的向下箭头时才会发生这种情况; 否则,正常的文本字段行为应该规则:按下不是最后一行的行应该将光标向下移动一行,然后按下最后一行应该移动到行的末尾.
  • 如果您的控件有一个菜单,请测试它在单击时保持打开状态,并且在打开时不会立即关闭.您可以使用一个功能来正确执行此操作,它可以使用64位.
  • 如果你的控件有一个菜单,用键盘测试它是否可导航(所有四个箭头键+ Home,End,Page Up,Page Down),可用(空格键/返回按键操作)和可取消(esc).