iOS 開發之Target-action模式

來源:互聯網
上載者:User

標籤:des   blog   http   使用   os   io   for   art   

Target-action:目標-動作模式,它貫穿於iOS開發始終。但是對於初學者來說,還是被這種模式搞得一頭霧水。

其實Target-action模式很簡單,就是當某個事件發生時,調用那個對象中的那個方法。如:按下按鈕時,調用Controller裡邊的click方法。“那個對象”就是Target,“那個方法”就是Action,及Controller是Targer,click方法是action。

一般Target都是Controller,而Action有它自己固有的格式:-(IBAction)click:(id)sender。

如所示,target是處理互動事件的對象執行個體,action是target對象中處理該事件的方法。

這裡有兩種方式給“炒菜”按鈕設定Action:

1、直接拖拽連線

2、以代碼的方式實現

在iOS中有一個UIControl類,該類中定義了一個

-(void)addTarget:(id)target action:(SEL) forControlEvents:(UIControlEvents)controlEvents

 

 方法,大部分視圖類都繼承自UIControl類,所以"炒菜"按鈕可以使用該方法實現Target-action模式。在iOS中這種設計模式被稱作一個對象給另外一個對象發送訊息。

- (void)viewDidLoad{    [super viewDidLoad];        // 給炒菜按鈕添加點擊事件    // 使用Target-action設計模式,在兩個對象間直接發送訊息    [self.btnCooking addTarget:self action:@selector(pressCooking:) forControlEvents:UIControlEventTouchUpInside];}

1、self 指目標對象為當前對象,及WViewController;

2、action 即 在目標對象上的點擊方法;

3、何時調用該方法,UIControlEventTouchUpInside即單擊時。

“炒菜”按鈕是一個可互動的視圖控制項,點擊它後,它指定了一個target(目標對象),並執行目標對象上指定的action(方法)。

action方法有以下幾種形式:

- (void)doSomething;// OR- (void)doSomething:(id)sender;// OR- (IBAction)doSomething:(id)sender;// OR- (IBAction)doSomething:(UIButton *) sender;

這裡的sender,寄件者,就是對 “菜單” 按鈕對象的引用。

以下代碼是完全用代碼定義的一個UIButton,並添加在self.view中:

- (void)viewDidLoad{    [super viewDidLoad];        // 執行個體化按鈕,並設定按鈕類型為圓角    UIButton *btnCustom = [UIButton buttonWithType:UIButtonTypeRoundedRect];    // 設定按鈕大小    btnCustom.frame = CGRectMake(124, 140, 73, 44);    // 設定按鈕標題    [btnCustom setTitle:@"點擊我..." forState:UIControlStateNormal];    // 設定按鈕點擊事件    [btnCustom addTarget:self action:@selector(customButton) forControlEvents:UIControlEventTouchUpInside];    // 將按鈕添加到View    [self.view addSubview:btnCustom];}/** 自訂按鈕點擊方法 */- (void)customButton{    [self.lblDish setText:self.txtMaterial.text];}

 UIButton的幾種觸發方式:

1、UIControlEventTouchDown 

  指滑鼠左鍵按下(註:只是“按下”)的動作

2、UIControlEventTouchDownRepeat

  指滑鼠左鍵連續多次重複按下(註:只是“按下”)的動作,比如,滑鼠連續雙擊、三擊、……、多次連擊。

  說明:多次重複按下時,事件序列是這樣的:

  UIControlEventTouchDown -> 

  (UIControlEventTouchUpInside) -> 

  UIControlEventTouchDown -> 

  UIControlEventTouchDownRepeat -> 

  (UIControlEventTouchUpInside) -> 

  UIControlEventTouchDown -> 

  UIControlEventTouchDownRepeat -> 

  (UIControlEventTouchUpInside) ->

  ......

  除了第一次按下外,後面每次摁下都是一個UIControlEventTouchDown事件,然後緊跟一個UIControlEventTouchDownRepeat事件。

3、UIControlEventTouchDragInside

  指按下滑鼠,然後在控制項邊界範圍內拖動。

4、UIControlEventTouchDragOutside

  與UIControlEventTouchDragInside不同的是,拖動時,滑鼠位於控制項邊界範圍之外。

  但首先得有個UIControlEventTouchDown事件,然後接一個UIControlEventTouchDragInside事件,再接一個UIControlEventTouchDragExit事件,這時,滑鼠已經位於控制項外了,繼續拖動就是UIControlEventTouchDragOutside事件了。

  具體操作是:在控制項裡面按下滑鼠,然後拖動到控制項之外。

5、UIControlEventTouchDragEnter

  指拖動動作中,從控制項邊界外到內時產生的事件。

6、UIControlEventTouchDragExit

  指拖動動作中,從控制項邊界內到外時產生的事件。

7、UIControlEventTouchUpInside

  指滑鼠在控制項範圍內抬起,前提先得按下,即UIControlEventTouchDown或UIControlEventTouchDownRepeat事件。

8、UIControlEventTouchUpOutside

  指滑鼠在控制項邊界範圍外抬起,前提先得按下,然後拖動到控制項外,即 

  UIControlEventTouchDown -> 

  UIControlEventTouchDragInside(n 個) -> 

  UIControlEventTouchDragExit -> 

  UIControlEventTouchDragOutside(n 個) 

  時間序列,再然後就是抬起滑鼠,產生UIControlEventTouchUpOutside事件。

案例傳送門:TargetActionPattern

參考:

1、http://developer.apple.com/library/ios/#documentation/general/conceptual/Devpedia-CocoaApp/TargetAction.html

2、http://blog.teamtreehouse.com/ios-design-patterns-target-action-part-1

3、http://developer.apple.com/library/ios/#documentation/uikit/reference/UIControl_Class/Reference/Reference.html

 

著作權聲明:本文由 http://wzrong.cnblogs.com 或者 http://iostour.diandian.com 原創,歡迎轉載分享。 請尊重作者勞動,轉載時保留該聲明和作者部落格連結,謝謝!

 

 

原創文章,如需轉載請註明出處,謝謝!

原文地址:http://www.cnblogs.com/wzrong/p/3218867.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.