Target-Action
arget-Action Explained In Swift
1 | let button = UIButton(type: .plain) |
将self作为参数传入button,这样button就有了当前实例的引用,就可以调用当前实例的函数
selector用来描述函数名
为防止加入
#selector
导致代码凌乱,可以为Selector
创建extension:1
2
3
4fileprivate extension Selector {
static let fireworks = #selector(Effects.fireworks)
static let onButtonTapped = #selector(ViewController.onButtonTapped(_:))
}ios开发中使用target-action的地方:UIButton、UISwitch、NotificationCenter、Timer
1.UITextField
在界面中显示可编辑区域的对象
1.1 声明
1 | class UITextField: UIControl |
2.UILabel
把label加到界面上需要:
- 使用一个string或者attributed string表示内容
- 如果使用nonattributed string,要对label进行配置
- 设置自动布局规则来管理label的大小和位置
- 提供可获取信息和定位的string
2.1 界面属性
a)核心属性
text
和 attributedText
- 指定label的内容。
- 把
NSString
对象赋值给text
,把模式设为Plain,以统一的外观显示。 - 把
NSAttributedString
对象赋值给attributedText
,把模式设为Attributed,把选择的样式属性应用到文字,也可以使用More菜单来展示其他外观属性,可以单独控制部分文本。 - 在运行时使用属性来获取该值。
Color
- 控制label中的文字的颜色。
- 在Plain模式中,指定整个label的颜色。
- 在Attributed模式中,使用color cell设置指定文字的属性。
Font
- 指定label中文字的字体。
- 在Plain模式下,指定整个label的字体。
- 在Attributed模式下,使用font panel指定 attributed string中的文字字体。
Alignment
- 控制label中文字的水平对齐。
- 可以选择 left, right, center, justified, 或者 natural。
- 在Plain模式下,该属性影响整个label的内容。
- 在Attributed模式下,可以单独控制每个段落的对齐。
numberOfLines
- 指定label渲染文字的最大行数。
- 设为0,会设为所需的行数
isEnabled
和isHighlighted
- 都可以控制label的界面。
- 选择Enabled时,文本变暗,表明处于非活跃状态。
- 选择Highlighted 时,文本以高亮显示。
b)空间属性
baselineAdjustment
- 当激活Autoshrink时,控制label中文本的垂直对齐。
- 选择Align Baseline会保持对准baselines,因为字体会自动减小。
- 选择Align Center会保持垂直中心对准。
- 默认为None,会和文本边框顶部对齐。
lineBreakMode
- 指定当文本一行比label边框长会发生什么
- character wrap和word wrap换行常被用在多行文本,来决定从哪里开始段行。
- 选择word wrap,会在单词之间断行;选择character wrap会在单词中间断行。
- Truncate head, middle, tail常被用在单行文本,用于省略文本。
minimumScaleFactor
和 allowsDefaultTighteningForTruncation
- 决定label在截断前是否调整界面文本。
- 选择Minimum Font Scale然后输入一个值,允许label减小字体大小来适用文本。
- 使用Tighten Letter Spacing,允许label减小字体间的间距。
c)高级属性
highlightedTextColor
- 决定文本选择后的颜色。
shadowColor
- 指定文本投影在label上的颜色,默认为透明
shadowOffset
- 控制投影的距离。
- 只有在设置了shadowColor时才有效。
d)查看继承的属性:UIControl
and UIView
2.2 自定义label界面
- 可以使用Auto Layout来定位和设置label大小
- 若在外部已经设置好label大小,当文本无法适用label时,
- 可以设
adjustsFontSizeToFitWidth
为true,然后设minimumScaleFactor
在0-1之间,表示缩小比例。 - 设置
allowsDefaultTighteningForTruncation
为true,可以在截断文本之前,缩小字符间的间距。
- 可以设
2.3 国际化
Internationalization and Localization Guide.
3.UIButton
添加按钮步骤:
- 创建时设置按钮类型
- 设置title为文本或者图片,设置大小
- 给按钮添加一个或者多个响应函数
- 设置Auto Layout调整按钮大小和位置
- 提供可访问性和 localized strings
3.1 响应点击
当用户点击时,按钮使用 Target-Action设计模式来通知app。设计哪个事件会触发哪个函数。运行时,按钮会处理所有触发的事件并调用相应函数。
使用
addTarget(_:action:for:)
给按钮添加响应函数。函数签名可使用以下三种:func doSomething() func doSomething(sender: UIButton) func doSomething(sender: UIButton, forEvent event: UIEvent)
3.2 设置按钮外观
- 按钮的类型决定了按钮的基本外观和行为。
- 在创建时使用
init(type:)
方法来指定类型。 - 创建完成之后不能改变。
- 最常用的类型是Custon和System。
- 要配置按钮外观,请使用appearance proxy object。可以通过
appearance()
类方法获取app中的所有按钮的代理对象。
a)按钮状态
- 五个状态:default,highlighted,focused,selected,disabled。
- 在设置按钮时,要分别对每个状态指定属性。若有某个状态没有指定属性,他会有个默认的设置。
- 特定情况也可以通过
adjustsImageWhenHighlighted
和adjustsImageWhenDisabled
等来改变默认属性
b)按钮内容
- 按钮内容通常为文本或者图片。
- 指定的内容用来配置按钮自身管理的
UILabel
和UIImageView
对象。 - 通过
titleLabel
orimageView
可以获取或者修改对应的值。 - 可以同时使用文本和图片配置按钮,也可配置背景图片。
- 在设置按钮时必须对每个状态都指定title、image、appearance属性。
- 如果有某个状态没有指定内容,按钮会使用与Default状态关联的值,还会添加适当的自定义。
c)着色
- 通过
tintColor
属性指定按钮的着色。该属性会设置按钮文本和图片等颜色。 - 若没有显示指定tint color,按钮会使用父视图的颜色。
d)边距
- 使用insets来添加或者移除内容周围的空间。
- 可以分别指定按钮的title边距(
titleEdgeInsets
),image边距(imageEdgeInsets
),或者同时指定这两个的边距(contentEdgeInsets
)。 - 使用insets会影响使用Auto Layout的按钮的内容框。
3.3 属性
a)核心属性
buttonType
- 按钮类型,决定了按钮的其他属性的默认设置。
- 运行时不能更改
State Config
- 状态选择器
- 选择一个值之后,按钮属性的更改会被应用到指定的状态。
Title
- 可以指定按钮的title为 plain string 或者 attributed string。
Title Font 和 Attributes
- 设置title的字体和其他属性。
- 设置选项取决于按钮的title是plain string 还是 attributed string。
- plain string可以指定字体、文字颜色、阴影颜色。
- attributed string可以指定对齐、文字方向、缩进、连字等。
Image
- 按钮的前景图片。
- 通常使用模版图片,可以使用自定义图片。
Background
- 按钮的背景图片。
b)外观属性
ShadowOffset
- 阴影的位移和行为。
- 只会影响文本。
Drawing
- 按钮的绘制行为
LineBreak
- 按钮文本的断行选项。
c)边距属性
Edge
- 可以单独指定按钮内容、文本、图片等每个边距。
Inset
- 正值会缩小对应的edge,向按钮中心移动。
- 负值会扩大对应的edge
- 使用
contentEdgeInsets
,titleEdgeInsets
, 和imageEdgeInsets
获取。