Swift(十五)控件(UIControl)

更新: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 alignmentInterface 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中的一個值哄陶,而是多個值,比如focusedhightlighted哺壶。
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疫稿。

在代碼中培他,contentHorizontalAlignmentcontentVerticalAlignment歸屬于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)的所有事件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末籽慢,一起剝皮案震驚了整個濱河市浸遗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箱亿,老刑警劉巖乙帮,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異极景,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)驾茴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門盼樟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锈至,你說我怎么就攤上這事晨缴。” “怎么了峡捡?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵击碗,是天一觀的道長。 經(jīng)常有香客問我们拙,道長稍途,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任砚婆,我火速辦了婚禮械拍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己坷虑,他們只是感情好甲馋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迄损,像睡著了一般定躏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芹敌,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天痊远,我揣著相機(jī)與錄音,去河邊找鬼党窜。 笑死拗引,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幌衣。 我是一名探鬼主播矾削,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼豁护!你這毒婦竟也來了哼凯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤楚里,失蹤者是張志新(化名)和其女友劉穎断部,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體班缎,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝴光,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了达址。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔑祟。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沉唠,靈堂內(nèi)的尸體忽然破棺而出疆虚,到底是詐尸還是另有隱情,我是刑警寧澤满葛,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布径簿,位于F島的核電站,受9級特大地震影響嘀韧,放射性物質(zhì)發(fā)生泄漏篇亭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一锄贷、第九天 我趴在偏房一處隱蔽的房頂上張望暗赶。 院中可真熱鬧鄙币,春花似錦、人聲如沸蹂随。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岳锁。三九已至绩衷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間激率,已是汗流浹背咳燕。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乒躺,地道東北人招盲。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像嘉冒,于是被迫代替她去往敵國和親曹货。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,870評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫讳推、插件顶籽、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,340評論 7 249
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,135評論 30 470
  • 從前有個國王帶著大臣一起去打獵究驴,在打獵的過程中镊绪,國王的小拇指被野獸咬掉了,回到皇宮以后洒忧,有個大臣說這也未嘗不是一件...
    楓葉凡閱讀 1,075評論 0 1