這一部份為單純使用Code寫一個顯示的畫面的HelloWorld共三篇,此為第三篇。 第一篇,第二篇,,有關這個分類的說明
本節要學的事:
- Taget - Action 的建立
- @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 的那一個時間點。
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 的目的了。
文章標籤
全站熱搜

*****