這一部份為單純使用Code寫一個顯示的畫面的HelloWorld共三篇,此為第三篇。  第一篇第二篇有關這個分類的說明

   

本節要學的事:

  1. Taget - Action 的建立
  2. @selector 的使用
接上一個程式的畫面:
 
我們最後的目的是一間始上方字串顯示 Hello,按下 Click 時,上方的字串會交互顯示 Hello 及 World。此時,我們就需要利用一種叫做 Target-Action 的機制了。簡單的講就是在 Button 上面,加上一個目標對向,當發生某件事如按下時,就發送訊息給目標。
 
先說明一下發送訊息這件事,在 Objective-C 中的訊息,其實就是去執行某個 method,也就是發送一個 method 名稱選擇器給目標,而這種 method 也會把傳送者本身的訊息,當成參數 (習慣上叫 sender ) 送給 method。

所以實作就是我們寫一個 method 來改變上面的資訊,method 的 selector 就叫  writeHelloWorld(UIButton *):sender 
這個方法的功用很簡單,但在上一個例子中,上方的 UILabel 為 loadView method 中的區域變數,不能由其他方法存取,所以我們先要把它改為 private 變數,比較快的方法是改宣告在 implementation 後面,而把原來的 loadView 中的宣告移除就可很簡單設定。
 
我們就可以寫下面 method 的程式碼去存取,如下:
 


-(void)writeHelloWorld:(UIButton *)sender{ 

if ([myLabel.text isEqualToString:@"Hello"]) { 
        myLabel.text=@"World!"; 
        }else{ 
        myLabel.text=@"Hello"; 
        }
}


一切完成之後,我們就要在 button 上加 Target 了。要在UIView 實體上加上 Taget 可以用 addTarget 方法,完整的參數為 :


addTarget:目標對向 action:SEL選擇器 forControlEvents:UIControlEvents


目標對向在這兒就是自已 self。選擇器要指向 writeHelloWorld 這個方法,但不可以直接打,因為編譯器無法分別你是要呼叫方法還是要傳送訊息,要傳送訊息時,要用 SEL 的資料類型,生成 SEL 有個簡單的方法,就是 @selector(),像是我們要產生 writeHelloWorld 的 SEL 就要寫成 @selector(writeHelloWorld:)


UIControlEvents 則是一個結構,指出在何種狀態下送出訊息,結構內容如下:

enum { 
   UIControlEventTouchDown = 1 << 0, 
   UIControlEventTouchDownRepeat = 1 << 1, 
   UIControlEventTouchDragInside = 1 << 2, 
   UIControlEventTouchDragOutside = 1 << 3, 
   UIControlEventTouchDragEnter = 1 << 4, 
   UIControlEventTouchDragExit = 1 << 5, 
   UIControlEventTouchUpInside = 1 << 6, 
   UIControlEventTouchUpOutside = 1 << 7, 
   UIControlEventTouchCancel = 1 << 8, 
   UIControlEventValueChanged = 1 << 12, 
   UIControlEventEditingDidBegin = 1 << 16, 
   UIControlEventEditingChanged = 1 << 17, 
   UIControlEventEditingDidEnd = 1 << 18, 
   UIControlEventEditingDidEndOnExit = 1 << 19, 
   UIControlEventAllTouchEvents = 0x00000FFF, 
   UIControlEventAllEditingEvents = 0x000F0000, 
   UIControlEventApplicationReserved = 0x0F000000, 
   UIControlEventSystemReserved = 0xF0000000, 
   UIControlEventAllEvents = 0xFFFFFFFF 
};


可能發生的事件很多,這次我們就設定在 UIControlEventTouchUpInside ,也就是當手指按下後離開 button 的那一個時間點。

綜合以上,我們就可以寫出

    [myButton addTarget:self action:@selector(writeHelloWorld) forControlEvents:UIControlEventTouchUpInside];

來達到我們設定 Target 的目的了。

arrow
arrow

    shenfive 發表在 痞客邦 留言(1) 人氣()