我是Button按鈕,我有許多行為,
又可以與使用者互動,比如說使用者可以按下我等等的,
但...我只知道我被按下了, 按下後我又不能做什麼事, 有誰可以幫我做事呢? |
我是Controller,
我可以程式的方式敘述做事的內容, 甚至以一個方法將要做的事裝起來, 你可以命令我做事吧。 |
好,那我就命令Controller你做事, 你就是我命令做事的對象 - target, 同時幫我做事 - action。 |
第1步:建立一個名為"Target_Action"的"Single View Application"專案,並加入一個Button按鈕(Round Rect Button)至畫面中。
第2步:在ViewController中,產生一個Button按鈕的插座,並取名為button
第3步:於"ViewController.m"中,加入變改Button按鈕字樣成"OK"的方法,這個方法就是等會Button按鈕被按下後要做的事,其中的一個參數sender即是會帶入Button按鈕本身:
-(void)sayHello:(id)sender{
[sender setTitle:@"Hello"
forState:UIControlStateNormal];
}
第4步:於"ViewController.m"中,於viewDidLoad方法中,直接使用target-action的技巧,讓Button按鈕命令Controller做事
- 第1個參數target即是代入controller物件(在此以self表示,因viewDidLoad方法是在controller中,因此使用self即可取得)
- 第2個參數action,以@selector的方式,描述要傳送給controller的訊息為"sayHello:"
- 第3個參數則指出當Button按鈕被按下時,則會開始叫controller作事,也就是傳送"sayHello:"訊息給controller
- (void)viewDidLoad
{
[super viewDidLoad];
[self.button addTarget:self
action:@selector(sayHello:)
forControlEvents:UIControlEventTouchUpInside];
}
第5步:執行後對Button按鈕,這時您會發現,Button按鈕被按下時,則會叫Controller,將自已按鈕上的字樣改成"Hello"
檔案連結:Target_Action.zip
Target一定要是Controller嗎?
只要是任何的物件皆可以成為target-action的對象,比如你可以自訂一個類別,而這個類別的物件也可以成為target,以進行後續的action