实例介绍
【实例截图】
【核心代码】
目录 第 1章 准备工作 1 1.1 Mac电脑 1 1.2 Xcode使用介绍 1 1.2.1 Xcode工作区 2 1.2.2 xib界面设计相关的工作区和菜单 3 1.3 工程结构 5 1.3.1 使用xib方式创建的工程 5 1.3.2 使用storyboard方式创建的工程 11 第 2章 窗口对象 13 2.1 窗口界面的组成 14 2.2 模态窗口 16 2.2.1 模态窗口 16 2.2.2 模态会话窗口 16 2.3 编程控制窗口 17 2.3.1 创建窗口对象 17 2.3.2 窗口通知 18 2.3.3 NSWindow的contentView 18 2.3.4 设置窗口的image和title 19 2.3.5 设置窗口的背景颜色 19 2.3.6 关闭窗口时终止应用 19 2.3.7 在窗口标题区域增加视图 20 2.3.8 NSWindow如何正确地保证居中显示 21 2.3.9 窗口显示位置控制 21 2.3.10 应用关闭后点击Dock菜单再次 打开应用 21 2.4 窗口的创建和管理 21 第3章 视图和滚动条 23 3.1 基本视图 23 3.1.1 坐标系统 23 3.1.2 frame和bounds 24 3.1.3 坐标转换 25 3.1.4 视图管理 25 3.1.5 视图查找 25 3.1.6 视图的autoSize控制 25 3.1.7 视图的layer属性 27 3.1.8 视图绘制 27 3.1.9 事件响应 28 3.1.10 视图的frame/bounds变化通知 28 3.2 增效视图 29 3.3 滚动条视图 31 3.3.1 滚动条视图工作原理 31 3.3.2 用代码创建滚动条视图 32 3.3.3 滚动到zhi定的位置 32 3.3.4 用代码实现文本视图滚动的示例 33 3.3.5 滚动条的显示控制 34 第4章 基本控件 35 4.1 控件的分类 35 4.2 控件家族类图谱 35 4.2.1 NSResponder 37 4.2.2 NSView 38 4.2.3 NSControl 38 4.2.4 NSCell 38 4.2.5 小结 39 4.3 文本框 39 4.3.1 UI属性说明 40 4.3.2 事件响应 40 4.3.3 文本内容的读取或修改 41 4.3.4 特殊按键响应处理 41 4.4 文本视图 42 4.4.1 UI属性说明 42 4.4.2 事件响应 43 4.4.3 文本的格式化显示 43 4.4.4 文本框高度根据文字高度自适应增长 44 4.5 文本搜索框 44 4.6 文本标签 46 4.6.1 UI属性说明 46 4.6.2 用代码创建文本标签 46 4.7 按钮 48 4.7.1 UI属性说明 48 4.7.2 事件响应 48 4.7.3 连接事件 49 4.7.4 用代码创建按钮 49 4.7.5 图片按钮的创建 49 4.8 复选框 50 4.8.1 UI属性说明 51 4.8.2 事件响应 51 4.9 单选按钮 51 4.9.1 UI属性说明 51 4.9.2 事件响应 52 4.10 分段选择控件 52 4.10.1 UI属性说明 53 4.10.2 事件响应 53 4.10.3 分段大小的控制 53 4.10.4 分段样式风格的控制 53 4.11 组合框 54 4.11.1 UI属性说明 54 4.11.2 事件响应 55 4.11.3 动态增加列表内容 55 4.11.4 使用数据源和代理 55 4.12 弹出式按钮 56 4.12.1 UI属性说明 56 4.12.2 动态列表项配置 56 4.12.3 事件响应 57 4.13 滑杆 57 4.13.1 属性设置 57 4.13.2 水平和垂直方向设置 57 4.13.3 事件绑定 58 4.14 日期选择器 58 4.14.1 UI属性说明 58 4.14.2 获取日期 59 4.14.3 日期变化的事件 59 4.15 步进器 59 4.15.1 UI属性说明 60 4.15.2 事件响应 60 4.15.3 文本框数据与步进器保持同步 60 4.16 进度指示器 60 4.16.1 UI属性说明 61 4.16.2 启动指示器动画 61 4.16.3 更新指示器进度 61 4.16.4 停止指示器动画 61 4.16.5 用代码创建进度指示器 62 4.17 图像视图 62 4.17.1 UI属性说明 62 4.17.2 圆角处理 62 4.18 分组框 63 4.18.1 UI属性说明 63 4.18.2 用代码创建分组框 63 4.19 分栏视图 64 4.19.1 重要属性和方法说明 64 4.19.2 用代码创建分栏视图 65 4.19.3 自定义分栏视图样式风格 65 4.19.4 分栏视图中的子视图控制 66 4.19.5 分栏视图子视图的隐藏和显示 68 4.20 集合视图 68 4.20.1 集合视图的content 69 4.20.2 NSCollectionViewItem 69 4.20.3 绑定模型到视图 70 4.20.4 使用数据源方式管理集合视图 71 4.20.5 实现集合视图的高亮选择 73 4.20.6 集合视图的背景设置 75 4.20.7 集合视图的布局管理器 75 4.20.8 设置集合视图的顶部头和底部尾 77 4.20.9 用代码创建集合视图 79 4.21 选项卡视图 79 4.21.1 UI属性说明 80 4.21.2 代理协议NSTabViewDelegate 80 4.21.3 动态增加选项卡 80 4.21.4 用无边风格的选项卡进行切换控制 81 4.22 弹出式气泡 82 4.22.1 重要属性 82 4.22.2 使用示例 83 第5章 面板和警告框 84 5.1 面板 84 5.1.1 UI属性说明 85 5.1.2 显示面板 85 5.1.3 隐藏面板 86 5.1.4 文件打开面板 86 5.1.5 文件保存面板 88 5.1.6 颜色选择面板 88 5.1.7 字体选择面板 89 5.2 警告框 89 5.2.1 UI属性说明 89 5.2.2 添加按钮 90 5.2.3 使用示例 90 5.3 使用独立的xib文件创建面板类 91 第6章 工具栏和菜单 94 6.1 工具栏 94 6.1.1 创建工具栏 94 6.1.2 UI属性说明 95 6.1.3 NSToolbarItem的属性说明 96 6.1.4 事件响应 96 6.1.5 创建非标准的工具栏项 97 6.1.6 验证工具栏项 97 6.1.7 用代码创建工具栏 98 6.1.8 工具栏与窗口控制按钮融合显示 99 6.2 菜单 99 6.2.1 UI属性说明 100 6.2.2 增加菜单 101 6.2.3 弹出式菜单 101 6.2.4 设置上下文菜单 102 6.2.5 Dock菜单 102 6.2.6 用代码创建菜单 103 6.2.7 获取应用默认的菜单 104 6.2.8 菜单有效性验证 104 6.3 状态条 105 6.3.1 NSStatusBar类的对象关系 105 6.3.2 NSStatusBar的使用方式 105 6.3.3 状态条增加弹出视图 107 第7章 表视图 109 7.1 表视图 109 7.1.1 使用xib创建表格 109 7.1.2 表格样式设置 112 7.1.3 表格数据显示配置 112 7.1.4 表格事件 119 7.1.5 创建表格上下文菜单 120 7.1.6 数据排序 120 7.1.7 数据拖放 121 7.1.8 表格数据获取 121 7.1.9 编辑表格内容 121 7.1.10 动态增加/删除表格行 122 7.1.11 用代码创建表格 123 7.1.12 代码控制选中行 125 7.1.13 表格行选中颜色定制 126 7.2 大纲视图控件 126 7.2.1 节点模型定义 127 7.2.2 初始化模型数据 128 7.2.3 实现数据源协议 128 7.2.4 实现代理方法,绑定数据到节点视图 129 7.2.5 节点选择的变化事件通知 129 7.2.6 动态增加节点 130 7.2.7 动态删除节点 130 7.2.8 代码控制行的展开和选中 131 7.2.9 修改节点展开关闭的默认图标 132 7.2.10 鼠标右键上下文菜单 133 第8章 自动布局 134 8.1 自动布局的原理 134 8.1.1 传统的布局 134 8.1.2 自动布局 135 8.2 栈视图 137 8.3 Xcode中的自动布局设置 138 8.3.1 Stack 139 8.3.2 Align 140 8.3.3 Pin 140 8.3.4 Resolve 141 8.4 自动布局的多种解决方案 141 8.4.1 一个问题的多种解决方案 142 8.4.2 约束选择的原则和建议 144 8.5 自动布局使用示例 144 8.5.1 两个视图大小相同 144 8.5.2 3个View大小相同 145 8.5.3 文本标签和输入框 145 8.5.4 文本标签动态字体和输入框 146 8.5.5 多行文本标签和输入框 146 8.5.6 多行文本标签动态字体和输入框 147 8.5.7 两个视图大小相同、水平方向的间距相同 148 8.5.8 简单的Stack View 149 8.5.9 复杂界面未使用栈视图 150 8.5.10 复杂界面使用多个嵌套栈视图 151 8.6 滚动条视图使用自动布局 151 8.7 通过代码设置自动布局约束 153 8.7.1 使用NSLayoutConstraint类 153 8.7.2 使用NSLayoutAnchor 155 8.7.3 使用VFL定义约束关系 155 8.7.4 使用第三方库AutoLayoutX 155 第9章 窗口控制器 157 9.1 xib中窗口的加载创建过程 157 9.2 手工创建窗口需要注意的问题 160 9.3 窗口控制器和窗口的关系 161 9.4 将AppDelegate中窗口的管理功能分离 161 9.5 窗口切换后对象失去焦点问题 163 第 10章 视图控制器 164 10.1 视图控制器 164 10.1.1 视图生命周期过程 165 10.1.2 创建视图控制器的3种方式 166 10.1.3 representedObject属性 167 10.1.4 子视图控制器管理 168 10.1.5 两个视图控制器之间的切换方法 169 10.1.6 Storyboard中的视图控制 172 10.1.7 视图中手势识别 174 10.2 选项卡控制器 175 10.2.1 使用NSTabView创建选项卡视图 175 10.2.2 使用NSTabViewController管理选项卡视图 176 10.2.3 使用Storyboard方式创建 176 10.2.4 选项卡选中事件 177 10.3 分栏视图控制器 178 10.3.1 控制器的几个重要的属性和方法 178 10.3.2 NSSplitViewItem 179 10.3.3 NSSplitView 179 10.3.4 使用Storyboard创建分栏视图控制器 179 10.3.5 用代码创建分栏视图控制器 180 10.3.6 可折叠的视图控制 181 10.4 视图控制器与窗口控制器的关系 183 10.4.1 视图与窗口 183 10.4.2 视图控制器与窗口控制器 183 10.4.3 不依赖xib和storyboard,纯代码实现应用 184 10.5 使用窗口控制器和视图控制器实现简单登录流程 186 10.5.1 登录流程的基本工程实现 186 10.5.2 代码控制启动的控制器 190 10.5.3 登录页面使用效果美化 190 10.5.4 登录页面纯代码实现 192 10.5.5 整个工程纯代码实现 195 10.6 滚动条视图gao级用法 195 10.6.1 滚动条视图显示多个按钮 195 10.6.2 滚动条视图处理分页滑动 199 第 11章 鼠标和键盘事件 206 11.1 事件的分发过程 206 11.2 事件中的两个核心类 207 11.2.1 NSResponder 207 11.2.2 NSEvent 207 11.3 鼠标事件 208 11.3.1 鼠标点击 208 11.3.2 鼠标拖放 209 11.3.3 鼠标区域跟踪 210 11.3.4 模拟鼠标点击选中 212 11.4 键盘事件 213 11.4.1 快捷键 213 11.4.2 控制键 214 11.5 按键绑定事件 215 11.5.1 系统绑定的按键事件 215 11.5.2 文字输入 216 11.6 事件监控 218 11.7 动作消息 218 11.8 在视图控制器中处理事件 219 第 12章 撤销/重做操作 220 12.1 撤销/重做流程分析 220 12.2 实现原理 222 12.3 撤销/重做动作的管理 223 12.3.1 NSUndoManager的创建 223 12.3.2 注册撤销动作 223 12.3.3 清除撤销动作 224 12.3.4 禁止注册撤销动作 224 12.3.5 撤销动作命名 224 12.3.6 撤销组 224 12.4 撤销栈的深度 224 12.5 撤销/重做通知消息 225 12.6 撤销/重做编程示例 225 第 13章 拖放操作 227 13.1 拖放开始 227 13.1.1 拖放数据定义 227 13.1.2 拖放的可视化图像设置 229 13.1.3 拖放源事件 229 13.1.4 拖放源协议NSDraggingSource 230 13.2 拖放接收 231 13.2.1 注册接收的拖放类型 231 13.2.2 拖放目标方协议 231 13.2.3 拖放接收方处理过程 231 13.3 拖放端到端编程 232 13.3.1 拖放源类DragSourceView 232 13.3.2 拖放目标类 233 13.3.3 视图控制器中拖放源初始化 235 13.4 常见的拖放示例 236 13.4.1 文件拖放处理 236 13.4.2 表格视图的拖放处理 237 13.4.3 大纲视图的数据拖放处理 239 第 14章 Cocoa数据绑定 243 14.1 KVC 243 14.1.1 KVC属性读写接口 244 14.1.2 KVC路径访问相关接口 244 14.1.3 批量属性访问接口 244 14.2 KVO 245 14.2.1 KVO相关接口 245 14.2.2 手工管理KVO 246 14.2.3 KVO的简单例子 247 14.3 KVB 248 14.3.1 传统的数据更新流程 249 14.3.2 使用绑定技术简化更新流程 249 14.3.3 实现绑定依赖的关键点 252 14.3.4 KVB绑定的处理流程 253 14.3.5 使用NSArrayController管理数据 254 14.3.6 使用NSTreeController管理数据 256 第 15章 蓝牙框架 261 15.1 蓝牙数据交换流程 261 15.2 蓝牙框架中的相关类 262 15.2.1 外围设备相关 263 15.2.2 数据中心相关 263 15.2.3 服务相关 263 15.2.4 特征值相关 263 15.3 外围设备的工作流程 263 15.3.1 系统初始化上电 263 15.3.2 创建服务 264 15.3.3 创建特征值 264 15.3.4 服务与特征值关联 264 15.3.5 发布服务 264 15.3.6 广播服务 265 15.3.7 数据读写请求 265 15.3.8 订阅请求处理 266 15.4 数据中心工作流程 266 15.4.1 系统初始化上电 266 15.4.2 搜索外围设备 267 15.4.3 建立连接 267 15.4.4 查询服务 267 15.4.5 查询服务特征值 267 15.4.6 服务特征读请求 268 15.4.7 服务特征值写 268 15.4.8 服务订阅 269 第 16章 Bonjour协议 270 16.1 Bonjour服务命名规则 271 16.2 Bonjour协议API栈 271 16.3 Bonjour核心流程 271 16.3.1 服务发布 272 16.3.2 服务发现 272 16.3.3 地址解析 273 16.4 Bonjour编程 273 16.4.1 服务发布 273 16.4.2 服务发现 274 16.4.3 直接使用Bonjour进行数据发送 274 16.4.4 需要注意的问题 275 第 17章 系统服务 276 17.1 服务处理流程 277 17.2 服务定义 277 17.3 服务提供方编程 279 17.3.1 实现服务功能接口 279 17.3.2 声明服务 280 17.3.3 注册服务 281 17.3.4 测试服务功能 281 17.4 服务使用方编程 282 17.4.1 注册数据类型 282 17.4.2 菜单有效性校验 282 17.4.3 发送数据到剪贴板 283 17.4.4 从剪贴板读取结果数据 283 第 18章 XPC服务 284 18.1 XPC架构 284 18.2 XPC编程实现 285 18.2.1 XPC服务接口对象 285 18.2.2 XPC服务方编程 285 18.2.3 XPC服务请求方编程 287 18.2.4 XPC服务接口反向调用 288 第 19章 消息推送 290 19.1 本地消息通知 290 19.1.1 注册本地消息通知 290 19.1.2 实现本地消息代理协议方法 291 19.1.3 取消本地通知 291 19.1.4 程序控制发送消息通知 292 19.2 远程消息通知 292 19.2.1 推送消息的处理流程 292 19.2.2 请求消息推送注册 293 19.2.3 设备 293 19.2.4 推送消息接收 293 19.2.5 提供者消息发送 294 19.2.6 消息格式 294 19.2.7 Feedback服务 295 19.2.8 消息推送环境的证书配置 295 19.2.9 推送消息的发送 296 第 20章 多文档应用 298 20.1 文档应用中的关键对象 298 20.1.1 文档控制器 298 20.1.2 文档模型 299 20.1.3 文档窗口控制器 299 20.2 创建基于文档的工程 299 20.2.1 Document Types 300 20.2.2 Exported UTIs 301 20.2.3 文档编程模板工程 301 20.3 wrapper方式读取文件 303 20.3.1 创建NSFileWrapper管理文件 304 20.3.2 从NSFileWrapper实例读取内容 304 20.3.3 支持NSFileWrapper文件的工程配置 305 20.3.4 完整的FileWrapper工程示例 305 20.4 文档处理流程 309 20.4.1 新建文档流程 309 20.4.2 打开文档流程 309 20.4.3 保存文档流程 310 20.4.4 导出文件流程 310 20.5 文档应用开发步骤 310 20.6 文档应用中的撤销/重做支持 311 20.7 文档应用管理个人档案 312 20.7.1 个人档案数据模型 312 20.7.2 文档数据以普通文件方式存储 313 20.7.3 文档数据以wrapper方式存储 316 第 21章 iCloud同步 320 21.1 容器 320 21.2 iCloud数据存储 321 21.2.1 iCloud文档数据处理流程 321 21.2.2 iCloud文档本地目录 323 21.3 键值存储 324 21.3.1 键值存储接口 324 21.3.2 键值存储限制 324 21.3.3 键值存储数据变化通知 325 21.3.4 键值存储处理流程 325 21.4 iCloud开发前准备工作 325 21.5 容器数据在多个App间共享 327 21.5.1 键值存储数据的App间共享访问 327 21.5.2 文档数据的App间共享访问 328 21.6 数据冲突 328 21.6.1 键值数据冲突 328 21.6.2 文档类型数据冲突 328 第 22章 CloudKit 329 22.1 使用Dashboard后台管理数据 330 22.2 容器共享 332 22.3 创建记录结构 333 22.4 CloudKit数据操作 334 22.4.1 保存数据 334 22.4.2 删除数据 336 22.4.3 查询数据 336 22.4.4 数据关联reference 337 22.4.5 批量查询数据操作 337 22.5 订阅数据变化通知 338 22.5.1 创建订阅 338 22.5.2 注册消息推送 338 22.6 生产环境部署 339 第 23章 Core Data 340 23.1 Core Data对象栈 341 23.2 在项目中使用Core Data 341 23.2.1 数据增加 345 23.2.2 数据删除 346 23.2.3 数据修改 346 23.2.4 数据查询 346 23.3 模型间关系 347 23.3.1 一对一 347 23.3.2 一对多 348 23.3.3 多对多 348 23.4 使用Bindings绑定管理对象 350 23.5 撤销/重做操作的支持 353 23.6 版本升级迁移 354 23.6.1 轻量级迁移 354 23.6.2 基于模型映射的迁移 357 第 24章 HTTP网络编程 360 24.1 简单的数据请求 361 24.1.1 使用系统默认方式创建URLSession 361 24.1.2 使用自定义的代理方法创建URLSession 362 24.1.3 创建URLSession使用POST方式传递数据 363 24.2 文件下载 364 24.2.1 创建下载任务 364 24.2.2 实现下载代理协议 364 24.3 文件上传 365 24.3.1 流式文件上传客户端代码编写 365 24.3.2 表单文件上传客户端代码编写 366 24.4 缓存 368 24.5 Cookie管理 369 24.5.1 Cookie编程 370 24.5.2 Cookie的一些使用场景 370 24.6 断点续传 371 24.7 基于URLSessionDataTask封装的网络处理工具类 372 24.7.1 网络处理工具类实现分析 372 24.7.2 HTTPClient工具类实现 373 第 25章 多线程 377 25.1 GCD 377 25.1.1 分发队列 377 25.1.2 GCD多线程编程 378 25.1.3 GCD实际使用的例子 382 25.2 OperationQueue 384 25.2.1 BlockOperation 384 25.2.2 Operation 385 25.2.3 设置任务间的依赖 386 25.2.4 设置Operation执行完的回调 387 25.2.5 取消任务 387 25.2.6 暂停或恢复队列的执行 387 25.2.7 任务执行的优先级 387 25.3 Thread 388 25.3.1 线程创建方式 388 25.3.2 Thread类中的关键方法和属性 389 25.3.3 线程中的共享资源保护 390 第 26章 事件循环 393 26.1 RunLoop的模式 393 26.2 RunLoop类 394 26.3 RunLoop的活动状态 395 26.4 定时器 396 26.5 RunLoop中的输入源 397 26.6 RunLoop事件处理流程 398 26.7 RunLoop使用场景 398 第 27章 绘图技术 399 27.1 绘图上下文 399 27.2 坐标系统 399 27.2.1 笛卡儿坐标 399 27.2.2 屏幕坐标与本地坐标 400 27.2.3 坐标变换 400 27.3 颜色与透明度 403 27.3.1 颜色模型和颜色空间 403 27.3.2 创建颜色 403 27.3.3 在绘图上下文中使用颜色 404 27.3.4 从系统颜色面板获取颜色的方式 404 27.4 绘图状态 405 27.5 图像 406 27.5.1 图像内部缓存 406 27.5.2 图像大小 406 27.5.3 图像的坐标系统 406 27.5.4 图像绘制方法 407 27.5.5 图像创建或加载 407 27.5.6 屏幕图像的捕获 408 27.5.7 图像的格式转换 409 27.6 阴影和渐变 409 27.6.1 阴影 409 27.6.2 渐变 410 27.7 文本绘制 413 27.7.1 文本属性参数 413 27.7.2 String的绘制方法 413 27.8 使用路径绘图 414 27.8.1 路径的样式 415 27.8.2 点 418 27.8.3 线 418 27.8.4 多边形 418 27.8.5 矩形 418 27.8.6 圆角矩形 419 27.8.7 圆和椭圆 419 27.8.8 弧形 419 27.8.9 贝塞尔曲线 420 27.9 绘图的性能优化 420 第 28章 核心动画 422 28.1 动画的产生过程 422 28.2 层 423 28.2.1 视图和层 423 28.2.2 层的坐标系统 424 28.2.3 层的时间系统 425 28.2.4 层的对象树 425 28.2.5 层级管理方法 426 28.2.6 层的内容 426 28.2.7 层的深度 427 28.2.8 层的透视投影 427 28.3 层动画 428 28.3.1 隐式动画 428 28.3.2 显式动画 429 28.4 核心动画对象 430 28.4.1 动画相关类 431 28.4.2 协议 433 28.4.3 辅助类 435 28.4.4 事务 436 28.5 动画的控制 437 28.5.1 隐式动画的产生过程 437 28.5.2 隐式动画的动作定义 438 28.5.3 动画结束通知 438 28.5.4 动画的暂停和恢复 439 28.6 macOS中的属性动画 439 28.6.1 属性动画 440 28.6.2 动画上下文对象 440 28.6.3 自动布局动画 441 28.7 系统动画与核心动画的对比 441 28.8 动画编程示例 442 28.8.1 关键帧动画 442 28.8.2 分组动画 444 28.8.3 转场动画 444 28.9 动画性能 445 28.10 系统专有层 446 28.10.1 渐变层 446 28.10.2 形状层 447 28.10.3 文本层 448 28.10.4 分片层 448 28.10.5 副本层 449 28.10.6 发射层 450 28.10.7 变换层 452 第 29章 多代理 455 29.1 多代理与代理和通知的比较 455 29.1.1 代理方式实现 455 29.1.2 通知 456 29.1.3 多代理 456 29.2 多代理的实现 457 29.2.1 Objective-C中多代理实现技术 457 29.2.2 使用消息转发机制进行优化 457 29.2.3 XMPPFramework 458 29.3 聊天列表示例 459 29.3.1 主要的视图控制器 459 29.3.2 联系人模型类 460 29.3.3 多代理管理类 460 29.3.4 多代理的注册 461 29.3.5 多代理的通知 462 第30章 数据转换 464 30.1 转换器基类 465 30.2 系统实现的转换器 465 30.3 绑定中使用的转换器 466 30.3.1 类型转换器的实现和注册 466 30.3.2 实现模型类 467 30.3.3 绑定Combo Box控件到模型类 468 30.4 实现自定义转换器的步骤 469 30.5 使用转换器分离数据转换逻辑 469 第31章 框架 471 31.1 框架与静态库 471 31.2 创建框架工程 471 31.2.1 接口定义 471 31.2.2 头文件引用声明 472 31.2.3 使用框架 473 31.2.4 框架的加载路径 476 31.2.5 框架的签名问题 478 第32章 应用沙盒化 479 32.1 macOS沙盒机制 479 32.2 应用沙盒配置信息 479 32.3 文件沙盒编程 481 32.3.1 设计界面 481 32.3.2 App启动处理 481 32.3.3 打开文件处理流程 482 32.3.4 保存文件 483 32.3.5 应用沙盒配置 483 32.3.6 作用域安全的书签 484 32.3.7 保存打开的文件URL的书签 484 32.3.8 应用启动时通过URL的书签获取文件shou权 484 第33章 数据导航视图 487 33.1 DataNavigationItem的设计 487 33.1.1 DataNavigationItem基类 488 33.1.2 DataNavigationButtonItem 488 33.1.3 DataNavigationTextItem 488 33.1.4 DataNavigationFlexibleItem 489 33.2 DataNavigationView接口和属性 489 33.2.1 接口 489 33.2.2 内部属性 489 33.3 DataNavigationView代码实现 490 33.3.1 item配置 490 33.3.2 创建视图 491 33.3.3 自动布局 492 33.3.4 更新文本视图的方法 494 33.4 使用DataNavigationView 494 第34章 表格数据管理控制器 497 34.1 表格列的动态配置 497 34.1.1 表列定义的模型 498 34.1.2 NSTableColumn类的扩展 499 34.1.3 NSTableView类的扩展 499 34.1.4 代码动态配置表列的表数据导航控制器 500 34.2 实现用代码创建的表格和用xib创建表格的兼容 504 34.3 表格的数据代理 505 34.3.1 数据集管理操作接口 505 34.3.2 数据源实现 507 34.3.3 动态创建表格内容的数据代理方法 507 34.3.4 表内容的编辑处理 511 34.3.5 TableDataDelegate的使用 512 34.4 数据列排序 513 34.5 数据行拖放交换顺序 514 34.6 数据分页显示控制 515 34.6.1 分页控制器 515 34.6.2 分页导航视图 517 34.6.3 分页数据获取 519 34.7 表格数据的增删编辑操作 519 34.7.1 增加数据 519 34.7.2 删除数据 520 34.7.3 编辑表数据 521 第35章 自动化小工具 522 35.1 图片资源适配自动化工具 522 35.1.1 实现思路 522 35.1.2 工程实现 524 35.2 国际化 527 35.2.1 App语言国际化的过程 527 35.2.2 自动化的思路 530 35.2.3 Xcode工程文件的编辑和修改 531 第36章 iPhone利用蓝牙控制Mac 534 36.1 控制的主要流程分析 534 36.2 macOS服务器端 535 36.2.1 XXXPeripheralService服务类 535 36.2.2 macOS端界面开发 537 36.2.3 Mac锁屏状态通知 538 36.2.4 控制Mac电脑的系统命令和脚本 539 36.2.5 macOS端接收iOS端的命令处理 540 36.3 iOS控制端 541 36.3.1 XXXCentralClient类 541 36.3.2 iOS界面开发 543 第37章 SQLite数据库编程 546 37.1 FMDB介绍 546 37.2 数据库操作接口封装 548 37.2.1 数据库管理对象 548 37.2.2 数据访问对象 549 37.2.3 MDAO对象 551 37.2.4 数据模型对象 552 37.2.5 具体使用 553 37.3 数据库加密 554 37.3.1 获取支持加密的SQLite3版本 554 37.3.2 加密数据库 555 37.3.3 操作加密数据库 556 37.4 获取SQLite元数据 556 37.5 模板引擎 559 37.5.1 Xcode中的模板 560 37.5.2 模板引擎处理流程 560 37.6 表模型自动化代码生成 561 37.6.1 模板文件定义 561 37.6.2 代码实现 562 第38章 开发一个完整的macOS应用 564 38.1 制定目标 564 38.2 开发自己的应用 564 38.3 主界面设计 564 38.3.1 主窗口控制器 565 38.3.2 分栏页面控制器 566 38.3.3 左边导航列表页的设计与实现 567 38.3.4 分栏右部界面 570 38.3.5 详细界面设计 571 38.4 工具栏设计 572 38.5 菜单设计 574 38.5.1 系统菜单 574 38.5.2 上下文菜单 575 38.6 应用偏好设置 577 38.7 页面控制器的核心流程 578 38.8 用户体验的一点改进 582 38.9 发布应用准备 583 38.9.1 发布到非应用商店渠道 583 38.9.2 发布到应用商店 584 后记 586
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论