这份Swift4.0的教程来自小波说雨燕 是能搜到的第一份Swift 4.0开发中文教程
我要是英语好早去听YouTube了
小知识点
1 2
| let id = String(describing: CardCell.self) withIdentifier: "id"
|
- ctrl + B 光标左移
- 点行号前面是加断点。去断点把它拖到外面就好了。
- 加 !是强制
导航和转场
新场景
- 拖一个新的UITableViewController,就要新建对应的场景控制器。
- New File –> Cocoa Class –> 起个名,父类选择UITableViewController
- 在StoryBoard中,identity栏讲场景与类绑定
添加导航:
菜单栏-Editor–>Embed in–>Nav~
- 怎么转到新场景:
控件上ctrl拖到新场景 选择 Show (Present是模态展示,没有层级关系)
转场
自动生成的代码中找到// MARK: - Navigation 解除注释
Table View[代理模式]
在ViewControler场景后加上UITableViewDataSource
就支持了TableView的数据源协议。
加上后会报一个当前不支持的错,点Fix自动填写两个方法。
第一个是说Table中有多少行。Ex:return 10
第二个方法设置每个单元格的模板。Ex:
1 2 3 4 5
| func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "WeaponCell", for: indexPath) cell.textLabel?.text = weapons[indexPath.row] return cell }
|
为什么要重复使用模板呢?
答:这样可以在滑动的时候,把消失的单元格从内存回收
协议连接:在TableView上ctrl拖到ViewControler上,选DataSource:
识别单元格
点击的是第几个单元格呢?
1 2 3 4 5 6
| @IBAction func favBtnTap(_ sender: UIButton) { //点击的坐标(相对于TableView) let btnPos = sender.convert(CGPoint.zero, to: self.tableView) //所在的行 let indexPath = tableView.indexPathForRow(at:btnPos)! }
|
- indexPath有两个属性[session,row]
就是第几列第几行 [横坐标,纵坐标]
左/右滑动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let aaa = UIContextualAction(){ ...//操作内容 completion(true) } let shareAction = UIContextualAction(style: .normal, title: "Share") { (_, _, completion) in let text = "这是一把\(self.weapons[indexPath.row])xue" let image = UIImage(named: self.weaponImages[indexPath.row])! let ac = UIActivityViewController(activityItems: [text,image], applicationActivities: nil) if let pc = ac.popoverPresentationController{ if let cell = tableView.cellForRow(at: indexPath){ pc.sourceView = cell pc.sourceRect = cell.bounds } } self.present(ac, animated: true) completion(true) } shareAction.backgroundColor = UIColor.orange let config = UISwipeActionsConfiguration(actions: [aaa,shareAction]) return config }
|
属性监视器[观察者模式]
变量后加大括号就是属性监视器 。
1 2 3 4 5 6 7 8 9 10
| var favorite = false {
willSet { if newValue{ favBtn.setImage(#imageLiteral(resourceName: "fav"), for: .normal) }else{ favBtn.setImage(#imageLiteral(resourceName: "unfav"), for: .normal) } } }
|