什么是Objective-C等同于.Net委托?

时间:2012-01-22 21:13:44

标签: .net objective-c kobold2d

在.Net中,当我有一个有事件的对象时,我可以通过委托注册处理该事件:

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");
}

3 个答案:

答案 0 :(得分:2)

Cocoa和CocoaTouch经常使用“目标/行动”。

  • 目标:一个objc对象。目标是得到消息的。
  • 操作:选择器。动作是用目标消息的选择器。

从这个意义上说,动作是等效的。

执行目标/操作时,将采用此常规形式:

[target performSelector:action withObject:someParameter];

当然,参数列表在现实世界中会有所不同。

UIControl课程非常小 - 请阅读有关该主题的更多信息。它将使您了解控件的目标/操作支持以及您将用于处理这些事件的接口。 NSControl是Cocoa的对应物,但这是一个更大的类 - 它定义的远远超过Target / Action接口。

答案 1 :(得分:0)

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

请注意,onButtonDown:withEvent:的第一个参数将是按钮对象,而不是触摸对象。

您可以在Cocoa Fundamentals Guide中了解有关目标/操作模式的更多信息。

答案 2 :(得分:0)

实际上,它可能是这样的:

[mybutton ccTouchEnded:self.onButtonDown];

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

此链接可能有所帮助:http://bynomial.com/blog/?p=13