當前位置:成語大全網 - 新華字典 - iOS開發-消息傳遞方式-target-action

iOS開發-消息傳遞方式-target-action

target-action是iOS中 UIControl 控件下使用的最常見的消息傳遞方式,target-action在中文中就是 目標-動作 ,也算是壹種簡單的設計模式.

主要的功能就是在發生某種事情的時候,給某某對象發送壹個消息。壹般情況下是在我們點擊按鈕,或者是滑動進度條之類的情況下發送給目標壹個消息。比如說,當我們肚子餓了的時候就告訴大腦要去找東西吃。

target-action的方法調用非常簡單,壹般實現壹個函數:

target就是目標,如果用之前的例子來比喻的話就是我們的大腦。

action就是動作,用之前的例子來比喻的話就是去找東西吃這個動作。

events是事件,比如說肚子餓了,或者口渴了,是出發動作的條件。

這裏用給 UIButton 添加點擊事件來做壹個?。

這樣就可以給targetBtn添加壹個按下的事件,當用戶按下按鈕時,按鈕就會告訴 self ,調用 targetBtnClicked: 方法。

UIControlEvents主要是事件的觸發條件。

target-action 模式傳值壹般通過 tag 來實現。

tag是壹個無符號整形,所有的 UIKit 控件都有這個屬性,在設定控件時可以加上tag值,在響應事件action中可以獲取到sender,通過獲取sender的tag來達到傳值的功能。

添加tag:

在action中獲取tag值:

tag只能傳遞壹個整形數字,這有很大的局限性,平時我們開發時可能還需要傳遞壹些復雜的數據,這個時候tag就顯得很局促了。

所以我們可以通過給父類添加category的方式,添加壹個info的字典,用來傳遞消息。

添加category:

使用runtime實現info的getter方法和setter方法:

在使用時設置info的值:

在action中獲取info中的值:

這裏我們是對 NSObject 進行的壹個拓展,寫完這個拓展之後,只要在繼承了NSObject的類的控件使用時,引入頭文件:

就可以隨意的傳遞值了。

最後放個 Demo ]( /rshinich/MessagePassing )。

這裏只是iOS中消息傳遞方式的第壹部分,這種傳值的方式使用到了runtime,意味著所有的NSObject子類都可以使用這個info,所以平時還是不是很建議用這種方式,如果平時想要傳遞壹些復雜的數據可以通過其他的方式來做,比如代理、block等。

本文章僅限個人學習,如果有什麽地方寫的不對的還希望各位大佬批評指正。