UIControl是UIView的子類事扭,當(dāng)然也是UIResponder的子類求橄。UIControl是諸如UIButton、UISwitch罐农、UITextField等控件的父類,它本身也包含了一些屬性和方法宰睡,但是不能直接使用UIControl類气筋,它只是定義了子類都需要使用的方法。
UIControl對(duì)象采用了一種新的事件處理機(jī)制麸恍,將前一節(jié)直接處理的觸摸事件轉(zhuǎn)換成簡(jiǎn)單操作搀矫,這樣可以無(wú)需關(guān)心用戶訪問(wèn)控件的具體方式。觸摸事件到達(dá)UIControl對(duì)象(由響應(yīng)者鏈派遣)后,在UIResponder的方法中(如touchBegan:withEvent)中肄方,UIControl將標(biāo)準(zhǔn)的觸摸事件轉(zhuǎn)換為特殊的控件事件,簡(jiǎn)單的理解就是虹茶,UIControl把復(fù)雜的觸摸事件封裝成了簡(jiǎn)單的易于使用的控件事件。例如通過(guò)UIControl對(duì)象處理后董济,按下按鈕的事件就被封裝成一個(gè)控件事件要门,而不用去判斷觸摸屏幕的整個(gè)操作過(guò)程。
例如按鈕的單擊事件:UIControlEventTouchUpInside
我們所需要知道的是UIControl首先將觸摸事件轉(zhuǎn)換為控件事件封豪,再轉(zhuǎn)換為帶接收放的操作炒瘟。我們只要編寫(xiě)第二次轉(zhuǎn)換的代碼,就是將控件事件轉(zhuǎn)換為有目標(biāo)的操作缘琅。
使用addTarget:action:forControlEvents
這是UIControl的一個(gè)方法廓推,為指定的控件對(duì)象添加事件受啥,例如:
[controlObj addTarget:recepientObj action @selector(method) froControlEvents : UIControlEvents];
controlObj是要響應(yīng)事件的控件對(duì)象姻报;
參數(shù)receientObj是要把消息發(fā)送到哪里,一般是self藤肢,通常指實(shí)例化控件對(duì)象的控制器;
action后面是一個(gè)選擇器省骂,表示該事件需要響應(yīng)的方法最住,事件做什么其實(shí)就寫(xiě)在這個(gè)方法里面;
最后一個(gè)是事件類型涨缚,表示響應(yīng)什么樣的事件。
使用的兩種方式:
1.通過(guò)代碼
在代碼中新建一個(gè)按鈕兰吟,然后為按鈕對(duì)象添加addTarget:action:forControlEvents方法,然后編寫(xiě)響應(yīng)方法即可履腋。
2.通過(guò)可視化實(shí)現(xiàn)
在IB中按住control鍵惭嚣,點(diǎn)擊鼠標(biāo)從按鈕拖動(dòng)到對(duì)應(yīng)的.h文件中,就建立了一個(gè)IBAction方法奄侠,在此方法中編寫(xiě)事件邏輯便可完成事件響應(yīng)载矿,用這種方法相比第一種來(lái)說(shuō)更直觀,開(kāi)發(fā)效率也更高弯洗。