# autolayout对齐技巧
- 组件拖到安全区外,默认对其者是整个
屏幕view,安全区内默认对齐者是safe area - 设置
equal width后,还会有比例属性,需要在约束位置将其改成1
# UIView
- 禁止元素展示到View组件以外:
clipsToBounds属性钩上
# UILabel
- 多行文字:双击,在属性里面设置文字,按
option + enter换行 - 下面设置lines,控制多行文本 - 变更颜色:color,选择第二个
color slider,再选择RGB slider- 右边三个点选择Device RGB才是正确的RGB颜色 - 获取/设置文字:
textLabel.text ?? ""
textLabel.text!
textLabel.text = "coderhdy\n好好学习"
1
2
3
4
2
3
4
# UIButton
- 获取/更改按钮文字
- type可以直接设置上一些默认图标
- 要更改字体大小等属性,需要把
title设置成attributed - disable:
Enable勾选取消
btn.titleLabel?.text! ?? ""
btn.titleLabel!.text!
// 规范,设置文字 + 状态
hiddenBtn.setTitle("你点啥", for: .normal)
// 或者,也行
btn.titleLabel!.text = "吃饭啦"
1
2
3
4
5
6
7
2
3
4
5
6
7
- 设置
hidden
hiddenBtn.isHidden = true
1
# 按钮点击事件
- 添加事件方法:
- 拖动视图到代码,
connection选择action;type选择UIButton;event选择touch up inside - 或者直接选中按钮最左边属性
touch up inside拖动到代码内@IBAction func uploadBtnClick(_ sender: UIButton) { sender.setTitle("你点啥", for: .normal) print("你点啥啊") }1
2
3
4 - 纯代码添加
override func viewDidLoad() { super.viewDidLoad() btn2.addTarget(self, action: #selector(addBtnClick(_:)), for: .touchUpInside) } @objc func addBtnClick(_ sender: UIButton) { sender.setTitle("你点啥啊", for: .normal) print("你点啥啊") }1
2
3
4
5
6
7
8
- 拖动视图到代码,
# UIStackView
- ios9新增组件
- 作用:轻松实现水平/垂直布局子组件可以少设置很多约束,自动按照stack排列
spacing:每个控件的间距
# UIViewController
- 一个UIViewController就是一个页面
- 可以直接用代码创建一个界面,但是那个界面就只能用代码编写
- 默认场景对应的类是
UIViewController
# 创建一个界面
- 推荐:添加
Controller目录,放各个页面的Controller: new ->Group - 创建文件
cocoa Touch class继承UIViewController - 视图选择新UIViewController,设置
class和module - 设置
Storyboard id完成创建
# 操作视图
- 以
popup打开:视图1选择一个按钮,control键+拖动到视图2,选择present as popover- 全屏:设置
presentation:fullScreen - 关闭:self.dismiss
@IBAction func closeBtn(_ sender: Any) { dismiss(animated: true) }1
2
3 - 全屏:设置
- 以代码控制打开ID传
storyboard id@IBAction func openThirdPage(_ sender: UIButton) { let ThirdController = storyboard!.instantiateViewController(withIdentifier: "ThirdView") // 全屏幕打开popup ThirdController.modalPresentationStyle = .fullScreen; present(ThirdController, animated: true, completion: nil) }1
2
3
4
5
6
7
8
# 路由
- 首页面:点击ViewController,勾选
is initial View Controller
# Navigation Controller
- 既有页面添加导航控制器:选中ViewController,右上角菜单选择
Editor-Embed on-Navigation Controller,原UIView可以设置页面Title了 - 可视化跳转:按钮
control + 拖动到新的view中,并选择push
# UITextField
- 输入文本等数据
if !textField1.text!.isEmpty {
print(textField1.text!)
}
1
2
3
2
3
- 设置
placeHolder
textField1.placeholder = "1111111"
1
# UIImageView
- 设置图片控件
- 可以在
Image设置中选择系统的图片 - 可以在assets根目录放入图片,
1x 2x 3x是1~3倍图片,再在Image中输入图片名称 - 动态控制展示本地图片
imageView.image = UIImage(named: "Univercity")
1
# UICollection
# ScrollView
# UITable
- 点的是
UITableView,对应的Controller就要选UIViewController,因为主页面controller还是UIViewController,TableView只是一个组件而已 - 点的是
UITableViewController,对应的Controller就要选UITableViewController - tableView要先设置
delegate = self,代表本类能操作table数据 - 设置
dataSource = self,代表数据源是本类 - 数据更新完要调用
tableView.reloadData()刷新页面
- 也可以将tableView的
delegate和dataSource通过可视化视图拖到对应的UIViewController上,做关联 - 可拖入
Table View Cell,要记得设置复用id
class ListController: UIViewController {
var dataArr: [String] = []
@IBOutlet weak var myTable: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
for index in 0...99 {
dataArr.append("你好呀\(index)")
}
// 事件代理为本类
myTable.delegate = self
// 数据代理为本类
myTable.dataSource = self
// 数据更新后重新加载列表
myTable.reloadData()
}
}
// 扩展实现UITableView类必须实现方法
extension ListController: UITableViewDataSource, UITableViewDelegate {
// 有多少个
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArr.count
}
// 每一个Cell长什么样子
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// id 为 UITableView 里面的 UICell 的 复用id
let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)
cell.textLabel?.text = dataArr[indexPath.row]
return cell
}
// 某一个Cell被点击了
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("点击了\(dataArr[indexPath.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
32
33
34
35
36
37
38
39
40
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
32
33
34
35
36
37
38
39
40