快速上手iOS UIKitUIKit是苹果官方的framework, 其中包含了各种UI组件, window和view, 事件处理, 交互, 动画, 资源管理等基础设施支持.
按照前面的介绍, 用UIKit写UI可以用storyboard(Interface Builder)和代码两种方式.
大体的思路都是添加组件后, 设置属性, 设置尺寸位置约束, 处理响应事件.
这里主要介绍用代码写的情形.希望这篇文章, 可以帮你快速上手UIKit, 熟悉常用的组件, 完成一些简单的UI界面相关任务.
在代码中写UI的基本步骤在代码中写UI的步骤大致是:
- 初始化.
- addSubview添加到当前view, 或hierarchy中的其他可达view.
- 设置约束.
class ViewController: UIViewController {var myLabel: UILabel!override func loadView() {view = UIView()view.backgroundColor = .white// 创建实例myLabel = UILabel()myLabel.translatesAutoresizingMaskIntoConstraints = falsemyLabel.text = "Hello"// 添加到view中view.addSubview(myLabel)// 设置约束NSLayoutConstraint.activate([myLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),myLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor),])}}
这里有几点说明:var** myLabel: UILabel!
组件字段这样声明有lateinit的作用, 如果不带!会报错, 说controller没有init方法.- 如果在代码中设置UI组件的constraints, 那么这个属性经常要设置为false:
translatesAutoresizingMaskIntoConstraints = **false**
. 如果组件的位置是通过frame来设置的, 则不用设置这个属性. - 约束有多种写法, 这里只是其中一种, 用anchor的方式.
myLabel = UILabel()myLabel.translatesAutoresizingMaskIntoConstraints = falsemyLabel.font = UIFont.systemFont(ofSize: 24)myLabel.text = "Hello"myLabel.numberOfLines = 0myLabel.textAlignment = .right
给UILabel设置点击事件:myLabel.isUserInteractionEnabled = truelet tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:)))myLabel.addGestureRecognizer(tapGesture)
点击事件处理方法:@objc func userDidTapLabel(tapGestureRecognizer _: UITapGestureRecognizer) {print("label clicked!")}
这里有#selector
, 对应的userDidTapLabel方法要加上@objc
. 便于OC的代码调用能找到swift的方法.给UILabel设置点击事件和UIButton不同, 这点我们后面说继承关系的时候解释一下.
按钮: UIButton设置文字:
submitButton = UIButton(type: .system)submitButton.translatesAutoresizingMaskIntoConstraints = falsesubmitButton.titleLabel?.font = UIFont.systemFont(ofSize: 36)submitButton.setTitle("SUBMIT", for: .normal)submitButton.setTitleColor(.black, for: .normal)
设置点击事件:submitButton.addTarget(self, action: #selector(submitTapped), for: .touchUpInside)@objc func submitTapped(_ sender: UIButton) {}
这里使用@objc
的理由同上.基本上我们在iOS代码中用到
#
的时候, 对应的方法都要加上@objc
.输入框: UITextField
myTextField = UITextField()myTextField.translatesAutoresizingMaskIntoConstraints = falsemyTextField.placeholder = "What's your name?"myTextField.textAlignment = .centermyTextField.font = UIFont.systemFont(ofSize: 44)
想要禁用输入框可以这样:myTextField.isUserInteractionEnabled = false
弹框在app里简单的交互我们经常需要弹出一个对话框:let alert = UIAlertController(title: "title", message: "message", preferredStyle: .alert)alert.addAction(UIAlertAction(title: "Ok", style: .default))alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))present(alert, animated: true)
其中preferredStyle有.alert
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 【软件学习】怎么在Word里面设置MathType分隔符,使公式按照章节自动编号
- 2023年2月13日拜师学艺好不好 2023年农历正月廿三拜师学艺吉日
- 2023年2月13日适合上学吗 2023年2月13日是上学的黄道吉日吗
- 2023年农历正月廿三开学典礼吉日 2023年2月13日是开学典礼的黄道吉日吗
- 2023年2月13日开学行吗 2023年2月13日是开学吉日吗
- 2023年2月13日是入学的黄道吉日吗 2023年2月13日入学黄道吉日
- 2023年10月15日适合入学吗 2023年10月15日入学好吗
- 2023年农历九月初一开学吉日 2023年10月15日开学行吗
- 2023年农历九月初一宜开学典礼吗 2023年10月15日适合开学典礼吗
- 2023年10月15日上学好吗 2023年10月15日上学好不好