Start Developing iOS Apps(Swift)
iOS 官方教程:Start Developing iOS Apps (Swift)。
知识点
Getting Started
- 认识 Xcode
Building the UI
- 构建 UI
- StoryBoard
- Auto Layout
- UI 与代码关联
- 添加 outlets
- 添加 action
- 委托:Swift - 委托(delegate)的介绍,及使用样例
- ViewController
- 调用
UIViewController
方法的流程:viewDidLoad()
viewWillAppear()
viewDidAppear()
viewWillDisappear()
viewDidDisappear()
- 添加图像
- 添加手势识别
- 属性列表 info.plist
- 提供照片库使用说明
- 调用
- 实现自定义控件
- 创建自定义视图
- 初始化视图:以编程方式 & 以 storyboard 方式
- 显示视图:配置 Identity inspector -> Class
- 向视图添加按钮:创建按钮、修改按钮属性、为按钮添加 Action、添加按钮到视图
- 添加对 Interface Builder 的支持
- 在检查器中访问自定义属性值:IBInspectable / IBDesignable
- 属性观察者(触发器):属性观察
- 在 Button 上添加星星按钮
- 实现 Button Action
- 变更按钮的状态
- 添加辅助功能信息(无障碍使用):带你认识——iOS Accessibility
- 将
rating
连接到视图控制器 vieController.swift 中 - 整理界面:删除设置默认文本按钮、Stack 元素居中处理
- 创建自定义视图
- 定义数据模型
- 创建数据模型
- 测试数据
Working with Table Views
- 创建 Table View
- Table View Controller 拖入 StoryBoard
- 设计表格 Cell
- Cell 与 代码关联
- 加载初始数据
- 创建 MealTableViewController.swift
- 显示数据
func numberOfSections(in tableView: UITableView) -> Int
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
- 实现导航
- 添加 Segue - Editor > Embed In > Navigation Controller
- 配置导航
- Bar Button Item object - 通过拖拽可完成场景切换
- 修改 Segue:修改动画 & 填写 Identifier
- 添加 Cancel / Save / Add Button
- [x]
❓ 在 MealList 中保存 MealMealViewController
中:save 按钮与代码关联;配置prepare(for:sender:)
函数;save 按钮在 StoryBoard 中拖入 exit;MealTableViewController
中定义unwindToMealList(sender: UIStoryboardSegue)
- 未输入名称时禁用保存
- 编辑前:
textFieldDidBeginEditing(_ textField: UITextField)
- 编辑后:
textFieldDidEndEditing(_ textField: UITextField)
- 定义一个函数用于判断是否禁用 button
- 编辑前:
- Cancel 取消编辑
dismiss(animated:completion:)
方法
- [ ]实现编辑和删除功能
- 对现有菜单进行编辑
- MealTableView
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
,识别 Segue,对目标页面的 Meal 进行赋值 - MealView 中
override func viewDidLoad()
使用触发器更新 Meal 数据 - 修改 MealTableView 中的
func unwindToMealList(sender: UIStoryboardSegue)
(Save 按钮的操作),对编辑和新增 Meal 加以区分
- MealTableView
- 取消编辑
❓ 两种返回上级视图的方法:如何判断UIViewController是使用pop,dismiss返回到上级视图控制器
- 删除菜单
- 在
viewDidLoad()
中添加 Edit 按钮navigationItem.leftBarButtonItem = editButtonItem
- 修改几个 tableView:
tableView(_:commit:forRowAt:)
- 添加
tableView(_:canEditRowAt:)
方法
- 在
- 对现有菜单进行编辑
Persist Data
NSObject
和 NSCoding
。
- 保存并加载 Meal
- 修改 Meal.swift 中的初始化方法并添加文件存储路径
- 保存并加载 MealList
一些零散的语法
踩坑
- How do I use the updated UIImagePickerControllerDelegate iOS 12 API?
- 点击手势无反应:GestureRecognizer not responding to tap
- 使用
#selector
报错:'#selector' refers to a method that is not exposed to Objective-C - It’s time to stop using index(of:)
- Why would you use
init!
instead ofinit?
when implementing a Failable Initializer in Swift?