2012-01-22 55 views
1

在.NET中,當我有了一個事件我可以註冊通過委託來處理該事件的對象:與.NET代理相當的Objective-C是什麼?

void Test() 
{ 
    Button button = new Button(); 
    button.Click += new EventHandler(OnClick); 
} 
void OnClick(object sender, EventArgs e) 
{ 
    text1.Text = "The Button Was Clicked"; 
} 

我怎麼做這樣的事情在Objective-C?具體來說,我試圖處理一個SneakyButton的ccTouchEnded。我認爲它會是這樣的:

SneakyButton* mybutton = [SneakyButton button]; 
[mybutton ccTouchEnded:self.onButtonDown]; 

- (void)onButtonDown:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    CCLOG(@"The Button Was Clicked"); 
} 

回答

2

可可和CocoaTouch經常使用「目標/行動」。

  • 目標:一個objc對象。目標是獲得消息。
  • 動作:選擇器。該操作是用來向目標發送消息的選擇器。

從這個意義上說,動作是等價的。

當執行目標/行動,它將採取這種一般形式:

[target performSelector:action withObject:someParameter]; 
當然

,參數列表將在現實世界有所不同。

UIControl這個類很小 - 請閱讀它以獲得更多關於這個主題的信息。它會給你一個控件的目標/行動支持和你將用於處理這些事件的接口的好主意。 NSControl是可可的對應物,但這是一個更大的類 - 它定義的遠多於目標/動作接口。

0
[mybutton addTarget:self action:@selector(onButtonDown:withEvent:) 
    forControlEvents:UIControlEventTouchUpInside]; 

請注意,onButtonDown:withEvent:的第一個參數將是按鈕對象,而不是觸摸對象。

您可以在Cocoa Fundamentals Guide中閱讀更多關於目標/動作模式的信息。

0

事實上,它可能是這樣的:

[mybutton ccTouchEnded:self.onButtonDown]; 

(void)myButtonClick:(id)sender { 
    mylabel.text = @"The Button Was Clicked"; 
} 

此鏈接可能幫助:http://bynomial.com/blog/?p=13