AppKit
Cocoa开发常用框架,用来在macOS构建和管理您的应用程序的用户界面。响应用户交互和系统事件、 启用辅助功能,以及处理文件、 文本和图像。
概述
AppKit是一个包含你需要的所有对象,比如实现图形化,事件驱动的用户界面:windows、 面板、 按钮、 菜单、 滚动条、 和文本框。AppKit 为您处理所有的细节,为它有效地绘制在屏幕上。与硬件设备和屏幕缓冲区进行通信,绘图前清除屏幕区域和剪切视图。很多 AppKit 的类可能第一次看起来令人生畏。然而,大多数的 AppKit 类是您间接使用的支持类。你也有在哪一级使用 AppKit 的选择:
- 使用 Interface Builder来创建用户界面对象到你的应用程序对象的链接。在这种情况下,你需要做的就是执行应用程序的类 — — 执行这些action和delegate的方法。例如,实现当用户选择菜单项时调用的方法。
- 以编程方式控制的用户界面,这需要更多的熟悉 AppKit 类和protocols协议。例如,允许用户将图标从一个窗口拖到另一个需要一些编程并且熟悉 NSDragging...协议。
- 通过设置 NSView 或其他类的子类来实现您自己的对象。当子类化 NSView 要你使用图形函数自己实现绘图的方法。子类化需要 AppKit 的工作原理有更深理解。
若要了解更多关于 AppKit,请查看NSApplication、 NSWindow 和 NSView 类,密切关注delegate方法。AppKit 的工作原理的深入了解,请参阅 NSResponder 和 RunLoop (NSRunLoop 在基础框架中)。
AppKit 类和协议
AppKit非常大,它包括超过 125 个类和协议。所有类都从基础框架 NSObject 类派生。下面简要描述AppKit其类和协议的一些主题。
封装Application
每个应用程序使用单个实例的 NSApplication 控制主事件循环,保持应用程序的窗口和菜单跟踪、 分发到相应的对象 (即,本身或其窗口之一) 事件、 autorelease 池设置和接收应用程序级别事件的通知。NSApplication 对象具有一个delegate(一个你分配的对象),当应用程序启动或终止,隐藏或激活,打开用户选定的文件等等会被通知。通过设置 NSApplication 对象delegate和你实现delegate方法,可以自定义您的应用程序的行为而不必子类化 NSApplication。
一般事件处理和绘图
NSResponder 类定义响应链,响应用户事件的对象的有序表。当用户单击鼠标按钮或按下一个键时,事件将生成并在响应链传递 寻找可以"回应"的对象。处理事件的任何对象必须从 NSResponder 类继承。核心 AppKit 类,NSApplication、 NSWindow 和 NSView,都是从 NSResponder 继承。
NSApplication 对象维护一个 NSWindow 对象列表 — — 一个用于每个属于应用程序的窗口 — — 与每个 NSWindow 对象维护 NSView 对象层次结构。视图层次结构用来在window内画图和处理事件窗口。NSWindow 对象处理窗口级别的事件、 将其他事件分发给他的视图 提供绘图区域给视图。NSWindow 对象还具有一个delegate,允许您自定义其行为。
NSView 是显示在一个窗口中的所有对象的抽象类。所有的子类实现绘图的方法,图形方法draw(_:) 是在创建一个新的 NSView 子类时覆盖的主要方法。
面板
NSPanel是NSWindow的子类, 类是您使用来显示瞬态、 全局或紧迫的信息。例如,您将使用 NSPanel,一个实例,而不是实例的 NSWindow,来显示错误消息或查询用户对特殊的情况下作出的反应。AppKit 实现一些常见的面板为您,如保存,打开和打印面板,用于保存,打开和打印文件。使用这些面板为用户提供一个一致的"外观和视觉"跨应用程序的常见操作。
菜单和游标
分组和滚动视图
控制应用程序
NSControl 和 NSCell 类和及其子类定义一套共同的用户界面对象,如按钮、 滑块和浏览器,用户可以以图形方式操作,来控制您的应用程序的某些方面。特定的控制会影响在于你自己︰ 当控制"touched"时,它将action消息发送到目标对象。你通常使用Interface Builder设置这些targets和actions,由控件拖动到您的应用程序的控制对象或其他对象。此外可以以编程方式设置targets和actions。
NSControl 对象是与实现细节的绘制和处理事件的一个或多个 NSCell 对象相关联。例如,一个按钮包括一个 NSButton 对象和一个 NSButtonCell 对象。这种功能的分离的原因,主要是以允许 NSCell 类 NSControl 类被重用。例如,NSMatrix 和 NSTableView 可以包含多个不同类型的 NSCell 对象。
表
NSTableView 类以行和列的形式显示数据。NSTableView 是理想的但不是限于,显示数据库记录,其中行对应于每条记录,列包含记录的属性。用户可以编辑单个单元格和列进行重新排列。通过设置其delegate和数据源对象,可以控制行为和 NSTableView 对象的内容。
文本和字体
NSTextField 类实现一个简单的可编辑的text field,并且 NSTextView 类提供了更全面的编辑功能,为了更大的文本body。
NSTextView,抽象的 NSText 类的子类,Cocoa的扩展文本系统定义的接口。NSTextView 支持富文本、 附件 (图形、 文件和其他),输入的管理和键绑定,可标记文本属性。NSTextView 与字体面板和菜单、 rulers和段落样式、 服务设施 (例如,拼写检查服务) 和粘贴板工作。NSTextView 还允许自定义through delegation和notifications — — 你很少需要子类 NSTextView。你很少以编程方式创建 NSTextView, 由于 Interface Builder调色板上的对象,如 NSTextField、 NSForm 和 NSScrollView,已经包含 NSTextView 对象。
它也是可以做到更强大、 更具创造性的文本操作 (如在一个圆圈中显示文本) 使用 NSTextStorage、 NSLayoutManager、 NSTextContainer 和相关的类。
NSFont 和 NSFontManager 类封装和管理字体系列、 大小和变化。NSFont 类定义单个对象为每个不同的字体;为了提高效率,这些对象共享在您的应用程序中。NSFontPanel 类定义字体规格面板,呈现给用户。
图形和颜色
少量的编程,自定义view对象可以在任何地方被拖拽,成为这种拖拽机制的一部分的对象遵循NSDragging……协议:可拖动的对象遵循NSDraggingSource协议,目标对象(接收器)遵循NSDraggingDestination协议,AppKit隐藏了光标跟踪的所有细节,并且显示图像。
打印
NSPrintPanel,NSPrinter NSPageLayout,NSPrintInfo类共同提供关于您的应用程序显示在窗口和视图的打印信息。您还可以创建一个EPS NSView表示。
访问文件系统
使用NSFileWrapper类创建对象对应于磁盘上的文件或目录。NSFileWrapper将文件的内容保留在内存中,以便它可以显示,改变,或传播到另一个应用程序。它还提供了一个图标给拖动文件或代表它作为一个附件。或使用NSFileManager类的基础框架来访问和枚举文件和目录的内容。NSOpenPanel NSSavePanel类还提供了一种方便和熟悉的用户界面到文件系统。
与其他应用程序共享数据
NSPasteboard类定义了剪切板,一个从你的app中拷贝的数据的仓库,使这些数据提供给任何愿意使用它的app。NSPasteboard实现类似剪切-复制-粘贴的操作。
NSServicesRequest协议通过使用剪切板之间传递的数据进行应用程序通信的注册服务。
检查拼写
NSSpellServer类使你定义拼写检查服务并且提供服务给其他app,连接你的app到拼写服务,使用NSSpellChecker类,NSIgnoreMisspelledWords 和 NSChangeSpelling protocols支持拼写检查的机制。
国际化
如果应用程序是用于在多个世界的地区,其资源可能需要自定义,或"本地化" 为本地语言。例如,应用程序可能需要有单独的日语、 英语、 法语和德语版本的字符串、 图标、 nib 文件或相关的帮助。具体到特定语言的资源文件 (扩展名为".lproj"目录) bundle目录的一个子目录中被组合在一起。通常您使用Interface Builder设置本地化资源文件。有关本地化和资源的更多信息,请参见Bundle
符号
转载请注明:天狐博客 » AppKit Framework Reference