更新:2018.05.24
整理了一下demo:SwiftDemo
在iOS系統(tǒng)中,控件是專門為與用戶交互設(shè)置及的
UIControl
類及其子類镇匀,子類包括UIButton牙寞、UITextField、UISwitch罐农、UIPageControl条霜、UISegmentedControl、UIDataPicker涵亏、UISlider
等宰睡。
UIControl
繼承自UIView
,所以UIControl
具備UIView
的可視化功能气筋。
UIControl
專門為與用戶交互而設(shè)計(jì)的主要體現(xiàn)在UIControl
類中增加了Target-Action機(jī)制拆内,利用這種機(jī)制,用戶就可以在iOS的世界自由翱翔了宠默。
一麸恍、Target-Action機(jī)制
- UIControl類引入了Target-Action(目標(biāo)行為模式)機(jī)制,那么它所有的子類也就自然擁有了這種機(jī)制搀矫,通過Target-Action機(jī)制抹沪,實(shí)現(xiàn)與用戶交互。
- 不僅僅是Target-Action機(jī)制能實(shí)現(xiàn)用戶交互瓤球,還有delegate設(shè)計(jì)模式融欧、手勢等都能實(shí)現(xiàn)用戶交互。
-
Target-Action能夠識別來自用戶的操作行為卦羡,這些用戶操作行為被ios系統(tǒng)定義在UIControlEvents結(jié)構(gòu)體中噪馏,UIControlEvents主要包括3種:
- 基于觸摸的控件事件。
- 基于值的控件事件虹茶。
- 基于編輯的控件事件逝薪。
屬性 | 描述 |
---|---|
觸摸事件 | - |
TouchDown |
表示控件邊界內(nèi)任何地方發(fā)生的按下(手指觸到屏幕)事件。 |
TouchUpInside |
表示控件便捷內(nèi)任何地方發(fā)生抬起來(手指離開屏幕)事件 |
TouchUpOutside |
表示手指完全落在控件的邊界外的事件 |
TouchDragEnter |
表示拖拽進(jìn)入控件邊界內(nèi)的事件 |
TouchDragExit |
表示拖拽移出控件邊界內(nèi)的事件 |
TouchCancel |
表示取消當(dāng)前的一個觸摸的系統(tǒng)事件 |
AllTouchEvents |
表示用于捕捉一切觸摸事件 |
值事件 | - |
ValueChanged |
表示控件的值發(fā)生變化后出發(fā)的事件蝴罪,如UITextField的text發(fā)生變化董济。 |
編輯事件 | - |
EditingDidBegin |
表示TextField控件內(nèi)部的觸摸開始事件,表示TextField開始編輯狀態(tài)(獲得焦點(diǎn)) |
EditingDidEnd |
表示TextField控件外部的觸摸結(jié)束事件要门,表示TextField結(jié)束編輯狀態(tài)(失去焦點(diǎn)) |
EditingChanged |
表示TextField的內(nèi)容編輯修改時(shí)觸發(fā)的事件 |
EditingDidEndOnExit |
表示結(jié)束編輯會話事件虏肾,但不一定是控件的外邊界觸摸事件 |
AllEditingEvents |
表示用于捕捉任意編輯事件 |
ApplicationReserved |
表示應(yīng)用程序的特定事件 |
SystemReserved |
表示系統(tǒng)(內(nèi)部的框架)特定事件 |
PrimaryActionTriggered |
表示semantic action |
AllEnvnts |
表示用于捕捉任何觸摸、值封豪、編輯、應(yīng)用程序缘琅、系統(tǒng)事件 |
二、UIControl類的方法和屬性
因?yàn)閁IControl是所有控件的父類,所以它的方法和屬性子類都會繼承,我們了解了UIControl類的方法和屬性糯景,會更好的理解其子類最住。
屬性名稱 | 方法說明 |
---|---|
alignment |
alignment 是Interface Builder 屬性,控件的content 的水平和垂直對齊方式所說的content 就是文本或內(nèi)容,例如:UIbutton、UITextField 。可以使用alignment 去配置content 在控件bounds 的對其方式,需要注意的是,這里的對齊方式不是指控件在其父視圖中的對齊方式。 |
content |
首先要說明這是Interface Builder 屬性,控件的初始化狀態(tài)沐扳。使用這個checkbox 可以選擇Selected、Enabled句占、Hightlighted 沪摄。 |
state |
控件的狀態(tài),state 是一個只讀屬性纱烘,它返回值都是UIControlType 杨拐,但是要特別說明的是,當(dāng)我們調(diào)用state 屬性時(shí)擂啥,得到的可能不僅僅是UIContralType 中的一個值哄陶,而是多個值,比如focused 和hightlighted 哺壶。 |
enabled |
是否開啟屋吨,僅在控件的該屬性處于開啟的情況下,用戶的觸摸事件才是有效的山宾。 |
selected |
是否選中至扰,一般的控件不會用到它的選中狀態(tài),但有一些是會的资锰,例如UISegmentedControl 會實(shí)現(xiàn)它的選中狀態(tài) |
hightlighted |
是否高亮敢课,控件的hightlighted 狀態(tài)是指手指點(diǎn)擊到控件且沒有松手的時(shí)候,在APP中绷杜,一般會針對hightlighted 做特別的設(shè)置翎猛。 |
contentVerticalAlignment |
內(nèi)容的垂直對齊方式,對于那些可以配置文本或圖片的控件來說接剩,文本或圖片就是控件的內(nèi)容切厘,那么這個屬性就是可以配置文本或圖片的垂直對齊方式。 |
contentHorizontalAlignment |
內(nèi)容水平對齊方式懊缺,同contentVerticalAlignment 疫稿。 |
在代碼中培他,contentHorizontalAlignment
和contentVerticalAlignment
歸屬于Alignment
屬性;
enabled
遗座、hightlighted
舀凛、selected
歸屬于Content
屬性。
方法名 | 方法說明 |
---|---|
sendAction(_ action: Selector, to target: Any?, for event: UIEvent?) |
通過此方法調(diào)用指定的方法途蒋,就是把當(dāng)前控件猛遍、方法、方法所屬的對象号坡、事件等關(guān)聯(lián)起來懊烤,進(jìn)行手動調(diào)用,這個方法不常用宽堆,主要被其他系統(tǒng)方法調(diào)用 |
sendActions(for controlEvents: UIControlEvents) |
調(diào)用與指定事件關(guān)聯(lián)的方法腌紧。 |
addTarget(_ target: Any?, action: Selector, for controlEvents: UIControlEvents) |
關(guān)聯(lián)指定對象、指定方法和指定的事件畜隶。這樣可以讓指定的對象的方法在用戶有指定的行為時(shí)被調(diào)用壁肋。比較常用 |
removeTarget(_ target: Any?, action: Selector?, for controlEvents: UIControlEvents) |
移除當(dāng)前控件上指定對象的關(guān)聯(lián)方法 |
actions(forTarget target: Any?, forControlEvent controlEvent: UIControlEvents) |
獲取綁定在指定對象和指定事件發(fā)生時(shí)候的方法數(shù)組 |
allTargets: Set<AnyHashable> { get } |
獲取與當(dāng)前控件關(guān)聯(lián)的所有對象。 |
allControlEvents: UIControlEvents { get } |
獲取與當(dāng)前控件本身關(guān)聯(lián)的所有事件 |