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...