1. 程式人生 > >UIControl 的基本使用方法和 Target-Action 機制

UIControl 的基本使用方法和 Target-Action 機制

來源: 南峰子(@南峰子_老驢)

我們在開發應用的時候,經常會用到各種各樣的控制元件,諸如按鈕(UIButton)、滑塊(UISlider)、分頁控制元件(UIPageControl)等。這些控制元件用來與使用者進行互動,響應使用者的操作。我們檢視這些類的繼承體系,可以看到它們都是繼承於UIControl類。UIControl是控制元件類的基類,它是一個抽象基類,我們不能直接使用UIControl類來例項化控制元件,它只是為控制元件子類定義一些通用的介面,並提供一些基礎實現,以在事件發生時,預處理這些訊息並將它們傳送到指定目標物件上。

本文將通過一個自定義的UIControl子類來看看UIControl的基本使用方法。不過在開始之前,讓我們先來了解一下Target-Action機制。

Target-Action機制

Target-action是一種設計模式,直譯過來就是”目標-行為”。當我們通過程式碼為一個按鈕新增一個點選事件時,通常是如下處理:

[button addTarget:self action:@selector(tapButton:) forControlEvents:UIControlEventTouchUpInside];

也就是說,當按鈕的點選事件發生時,會將訊息傳送到target(此處即為self物件),並由target物件的tapButton:方法來處理相應的事件。其基本過程可以用下圖來描述:

注:圖片來源於官方文件Cocoa Application Competencies for iOS – Target Action

即當事件發生時,事件會被髮送到控制元件物件中,然後再由這個控制元件物件去觸發target物件上的action行為,來最終處理事件。因此,Target-Action機制由兩部分組成:即目標物件和行為Selector。目標物件指定最終處理事件的物件,而行為Selector則是處理事件的方法。

有關Target-Action機制的具體描述,大家可以參考Cocoa Application Competencies for iOS – Target Action。我們將會在下面討論一些Target-action更深入的東西。

例項:一個帶Label的圖片控制元件

回到我們的正題來,我們將實現一個帶Label的圖片控制元件。通常情況下,我們會基於以下兩個原因來實現一個自定義的控制元件:

  • 對於特定的事件,我們需要觀察或修改分發到target物件的行為訊息。

  • 提供自定義的跟蹤行為。

本例將會簡單地結合這兩者。先來看看效果:

這個控制元件很簡單,以圖片為背景,然後在下方顯示一個Label。

先建立UIControl的一個子類,我們需要傳入一個字串和一個UIImage物件:

@interface ImageControl : UIControl

- (instancetype)initWithFrame:(CGRect)frame title:(NSString*)title image:(UIImage*)image;

@end

基礎的佈局我們在此不討論。我們先來看看UIControl為我們提供了哪些自定義跟蹤行為的方法。

跟蹤觸控事件

如果是想提供自定義的跟蹤行為,則可以重寫以下幾個方法:

- (BOOL)beginTrackingWithTouch:(UITouch*)touchwithEvent:(UIEvent*)event

- (BOOL)continueTrackingWithTouch:(UITouch*)touchwithEvent:(UIEvent*)event

- (void)endTrackingWithTouch:(UITouch*)touchwithEvent:(UIEvent*)event

- (void)cancelTrackingWithEvent:(UIEvent*)event

這四個方法分別對應的時跟蹤開始、移動、結束、取消四種狀態。看起來是不是很熟悉?這跟UIResponse提供的四個事件跟蹤方法是不是挺像的?我們來看看UIResponse的四個方法:

- (void)touchesBegan:(NSSetUITouch *> *)toucheswithEvent:(UIEvent*)event

- (void)touchesMoved:(NSSetUITouch *> *)toucheswithEvent:(UIEvent*)event

- (void)touchesEnded:(NSSetUITouch *> *)toucheswithEvent:(UIEvent*)event

- (void)touchesCancelled:(NSSetUITouch *> *)toucheswithEvent:

相關推薦

UIControl基本使用方法 Target-Action 機制

來源: 南峰子(@南峰子_老驢) 我們在開發應用的時候,經常會用到各種各樣的控制元件,諸如按鈕(UIButton)、滑塊(UISlider)、分頁控制元件(UIPageControl)等。這些控制元件用來與使用者進行互動,響應使用者的操作。我們檢視這些類的繼承體系,可以看到它們

Java記憶體垃圾回收(Garbage Collection)機制基本方法原則:System.gc()與finalize()

Java記憶體垃圾回收(Garbage Collection)機制基本方法和原則:System.gc()與finalize() Java一個物件的finalize()函式,是在當前物件被回收時才會呼叫。System.gc()暗示和提醒JVM開始垃圾回收。Java程式中顯示呼叫System.g

iOS - Target-Action機制創建自己的UI控件需要了解的知識

sse devel 並不會 from 開放 針對 實測 域名 uislider 我們在開發應用的時候,經常會用到各種各樣的控件,諸如按鈕(UIButton)、滑塊(UISlider)、分頁控件(UIPageControl)等。這些控件用來與用戶進行交互,響應用戶的操作。我們

Struts2的動態呼叫Action方法預設Action

動態呼叫: 在瀏覽器裡輸入http://localhost:8080/專案名/Action名!方法名,即可以實現動態呼叫,而不需要為Action中的每個方法都在struts.xml進行action的配置。 注意:要把struts.enable.DynamicMethodIn

【android 6.0 動態申請許可權的基本方法框架使用】

基本的使用: 先提供一下goog官方的學習文件: int selfPermission = ContextCompat.checkSelfPermission(Main2Activity.this, Manifest.permission.CA

File檔案的一些基本方法操作

1.File物件對應你磁碟上的一個檔案或者資料夾(路徑),一個file物件代表了一個檔案或者資料夾的引用,並不是直接物理上的。 2.File.separator: 連線符 public static final String separator與系統相關的

ObjectC----NSObject常用方法OC反射機制

    // Created  By   郭仔  2015年04月11日17:13:22 NSObject常用方法: ========================================

File物件的一些基本方法一些練習

<pre name="code" class="java"><strong><span style="font-size:32px;">1、常見方法</span></strong><span style="f

JavaScript的基本方法範例

1: <script language=”JavaScript”> 2: <!-- 3: var myVariable = “Hello there”; 4: document.write(myVariable.big() + “<br>”); 5: document

Valid Parentheses基本方法幾種優質解法解析

今天所做的習題是LeetCode20,Valid Parentheses,有很大的收穫。 第一個想到的就是利用棧 先從左到右遍歷字串,找到所有的左部放到棧中, 再從右到左遍歷字串,找到所有的右部放到棧中, 之後開始進行匹配 發現不匹配立刻返回FALSE 到一方空了之後 如果

VUE 配置基本方法的應用

12px 商品列表 sets config err emp har 別名 單獨 個人寫的一個框架 $ npm install learnvue 粗略的介紹一下這個項目 進入 learnve文件 執行 $ npm install $ npm start 項目

linux下安裝mongodb的方法終端下基本操作

base 當前 操作 god --help 客戶 drop tar -s 在linux環境安裝mongoDB: 一般認為偶數版本為穩定版 如 1.6.x,奇數版本為開發版如1.7.x 32bit的mongoDB最大能存放2g的數據,64bit沒有限制 方法

1.1 js 面向對象的基本概念基本使用方法

朝向 排序 讀取 只需要 try catch 傳遞 個數 存在 創建表 js 面向對象的基本概念和基本使用方法 -> js 是不是一個面向對象的語言? 說不是:因為與傳統面向對象的理論語言有矛盾。C#,Java。 說是:因為js裏面到處都是對象,數組,時間,正則

脫殼:OEP(即程序入口點)查找 --- 基本思路常見方法

dash xxxx 適合 往回 去掉 nbsp 忽略 回車 p地址 OEP:程序的入口點,軟件加殼就是隱藏了OEP(或者用了假的OEP), 只要我們找到程序真正的OEP,就可以立刻脫殼。 PUSHAD (壓棧) 代表程序的入口點, POPAD (出棧) 代表程序的

Ognl表達式基本原理使用方法

ognl表達式 作用 設置 submit implement ring 獲取request 編碼 組成 1.Ognl表達式語言 1.1.概述 OGNL表達式 OGNL是Object Graphic Navigation Language(對象圖導航語言)的縮寫,他是一個開

java中,方法引數是基本型別引用型別的區別

方法引數是基本型別時,傳遞的是值。 方法引數是引用型別時,傳遞的是記憶體地址值 當引數是基本型別時,在呼叫方法時將值傳遞到方法中,執行方法,執行結束方法退出,對原本main中定義的變數沒有任何操作(方法中沒有return)。即:此時只跟棧有關係,方法執行完之後(方法中沒有return),會彈棧。

簡單的controller方法action方法

不同系統的controller方法和對應的action方法都不一樣,但是基本知識呼叫路徑和介面的定義方法有區別,方法中的編寫是一樣的,post和get定義,介面引數的定義,路徑的編寫和註解的使用 1. Controller Post @RestController @Requ

1.java 基本資料型別、運算子、控制語句、方法遞迴

1.基本資料型別   Java是一種強型別語言,每個變數都必須宣告其資料型別。 Java的資料型別可分為兩大類:基本資料型別(primitive data type)和引用資料型別(reference data type)。 Java中定義了3類8種基本資料型別 (1)整

懶載入預載入的基本原理實現方法

懶載入的原因: 對於圖片過多的場景,為了提高頁面的載入速度,降低伺服器的負載,增強使用者體驗,我們對還沒出現在視野的圖片先不載入,當元素出現在我們視野中的時候再載入。 懶載入的原理: 我們先將img標籤中的src連結設定為一樣的圖片(空白圖片),將真正的圖片連結放在自定義屬性中,如(da

Nginx 的 安裝、基本使用方法 Linux 版本下載地址

1.到官網下載穩定的版本 Nginx 官網 : nginx.org/en/download.html  圖中 標紅 1. 是新版 ,標紅2. 是穩定版 下面是歷史版本 我下載的 是 畫紅圈的 nginx/Windows-1.14.2 穩定版本 2.解壓安裝