UIButton 觸發多個事件 響應同一函式

2021-06-20 16:22:50 字數 2123 閱讀 8187

1v1繫結方法

uibutton利用函式:

- (void)addtarget:(id)target action:(sel)action forcontrolevents:(uicontrolevents)controlevents;
繫結事件。

一般的n v 1繫結方法

一般是每次繫結乙個事件,如:uicontroleventtouchdown、uicontroleventtouchupinside等。每個事件的響應函式一般也不同,所以大部分時候這麼寫:

[btn addtarget:self action:@selector(action1:) forcontrolevents:uicontroleventtouchupinside];

[btn addtarget:self action:@selector(action2:) forcontrolevents:uicontroleventtouchdown];

但是,有時候,我們想要觸發多個事件時執行同一操作,比如,按鈕按下的時候彈框,按鈕彈起時也彈框,那麼一般寫法是:

[btn addtarget:self action:@selector(alert:) forcontrolevents:uicontroleventtouchupinside];

[btn addtarget:self action:@selector(alert:) forcontrolevents:uicontroleventtouchdown];

事件觸發簡單原理

uicontrolevents 型別是 ns_options,值是一系列:1 << 0, 1 << 1, 1 << 2,

1<< 

3…… 假設有4個事件:

a、b、c、d,它們分別對應的就是0001,0010,0100,1000。

以下述**為例,觸發a事件時,執行action操作:

[btn addtarget:self action:@selector(action:) forcontrolevents:a];
程式執行中,假如觸發乙個事件event,後台對event和a進行與操作,如果結果非0,則執行action,否則什麼都不做。如果event是a,那麼a&a,肯定非0,執行action;如果是b、c、d,0001&0100、0001&0010、0001&1000結果都是0,什麼都不做。

自定義uicontrolevents

當事件很多時,用一般的n v 1繫結方法就很麻煩。所以,我們可以自定義uicontrolevents。

仍以上面abcd為例,如果想要觸發a、b事件都執行action,可以將第三個引數修改為0011。這時:

a&0011 = 0001&0011 = 0001  非0;

b&0011 = 0010&0011 = 0010  非0;

c&0011 = 0100&0011 = 0000  0;

d&0011 = 1000&0011 = 0000  0。

所以當我們想按鈕按下和彈起時都執行彈框操作,可以設定:

uicontrolevents event = uicontroleventtouchdown|uicontroleventtouchupinside

[btn addtarget:self action:@selector(alert:) forcontrolevents:event];

我遇到的情況是,我需要在按鈕按下時執行action1,其餘時候全部執行action2,所以我的**是:

uicontrolevents event = uicontroleventallevents - uicontroleventtouchdown;
注意:

uicontrolevents event = !uicontroleventtouchdown;
是取非,得到的是0;

按位取非是 0 - uicontroleventtouchdown 或者 ~uicontroleventtouchdown 。

UIButton長按事件

新增長按事件 1 void viewdidload 2 18 void btnshort 19 22 void btnlong uilongpressgesturerecognizer gesturerecognizer 28 更多介紹 加個 longpressgesture 設定如下 uilong...

UIButton 的點選事件詳解

uicontroleventtouchdown 單點觸控按下事件 使用者點觸螢幕,或者又有新手指落下的時候。uicontroleventtouchdownrepeat 多點觸控按下事件,點觸計數大於1 使用者按下第 二 三 或第四根手指的時候。uicontroleventtouchdraginsid...

vba workbook觸發事件

這種涉及到book的觸發事件,就需要寫在thisworkbook裡面了 一開啟那個book,就自動觸發業務 private sub workbook open msgbox 奧利給兄弟們 endsub 在關閉我的book之前,給我執行的操作 private sub workbook beforecl...