可视化控件:
- UIKit坐标系
- 标签(UILabel)
- 按钮(UIButton)
- 分段控制器(UISegmentedControl)
- 文字框(UITextField)
- 滑块(UISlider)
- 开关(UISwitch)
- 活动指示器(UIActivityIndicatorView)
- 进度条(UIProgessView)
- 页面控件(UIPageControl)
- 步进器(UIStepper)
- 图片框(UIImageView)
- 多行文字框(UITextView)
- 滑动控件(UIScrollView)
- 选择器(UIPickerView)
- 日期选择器(UIDatePicker)
- 网页控件(WKWebView)
- 模糊与模糊明亮特效控件(UIVisualEffectView)
- 工具列(UIToolbar)
- 搜索列(UISearchBar)
- 视图(UIView)
UIKit坐标系
以视窗的左上角为坐标原点,向右增加x的值,向下增加y的值。每个控件有两个和坐标与控件大小有关的属性,分别是frame和bounds。这两个属性中都包含了origin和size结构体。结构体size中包含width和height两个属性,分别记录了控件的宽度和高度,frame和bounds中的size属性是一样的。结构origin包含x和y两个属性,分别记录了控件的x坐标和y坐标。在frame中origin存储的值是控件左上角到父容器(superview)的左上角的举例,而bounds中origin存储的值一般都是0。
标签(UILabel)
用来显示文字,通过text属性可以获取Label控件上的文字。可以为Label设置具有丰富样式的文字(推荐一个第三方库BonMot,支持图文混排,自定义格式字符串,封装成类CSS样式非常方便)
- numberOfLines属性控制Label可显示的行数,如果不限制行数设置为0。
- Autoshrink可以设置当文字超过Label的宽度时,自动缩小字体,防止文字结尾出现「…」符号,经常使用在支持多国语言的APP上。
按钮(UIButton)
按钮主要用于与用户交互,本身有四种状态:预设状态(default)、手指点下但未放开(hightlighted)、被选择(selected)、禁用(disabled)。
- setImage(image:for:)设置按钮位于各种状态下的图片。
- setBackgroundImage(image:for:)设置按钮背景图片。
- backgroundColor属性设置按钮背景颜色。
分段控制器(UISegmentedControl)
用来显示像页签(可以理解为翻页器)一样的页面,当使用者选择不同区段的按钮时,通过IBAction函数就可以知道使用者选择了哪个区段。
@IBAction func click(_sender: UISegmentedControl) {
let index = sender.selectedSegmentIndex//获取索引,最左侧为0
let title = sender.getForSegment(at: index)!//取得分段上的标题文字
}
文字框(UITextField)
用于接受用户的输入,不论使用者输入什么内容,都以String类型存储在文字框的text属性中。
- 第一响应者状态(first responder),当文字框变为第一响应者时,虚拟键盘会被呼出,这时可以在虚拟键盘上打字输入到文本框中。可以通过在文本框上点击或调用becomeFirstResponder()函数来使文本框成为第一响应者。如果想关闭虚拟键盘,可以调用resignFirstResponder()函数。
- 设置「Clear Button」可以让文字框出现删除按钮,可以删除已经输入的文字。
- iPad上的虚拟键盘自带关闭按钮,但是iPhone上没有。可以给虚拟键盘添加一个工具列用于用户手动关闭键盘;或在文本框所在ViewController中重写
touchesBegan(_:with:)函数,在这个函数中结束View的编辑状态或调用每一个文字框的resignFirstResponder()函数。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
//如果不需要过度动画,使用以下写法。
UIView.animate(withDuration: 0) {
self.view.endEditing(true)
}
}
滑块(UISlider)
用来让使用者通过滑动的方式设置数值。
通过valueChanged(_:)函数监听值的变化。(以拖线函数举例)
@IBAction func valueChanged(_ sender: UISlider) {
print(sender.value)
}