1

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

3 回答 3

2

Cocoa 和 CocoaTouch 经常使用“Target/Action”。

  • 目标:一个 objc 对象。目标是收到消息的内容。
  • 动作:一个选择器。动作是向目标发送消息的选择器。

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

当执行目标/动作时,它将采用以下一般形式:

[target performSelector:action withObject:someParameter];

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

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

于 2012-01-22T21:18:13.480 回答
0

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

[mybutton ccTouchEnded:self.onButtonDown];

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

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

于 2012-01-22T21:22:27.287 回答
0
[mybutton addTarget:self action:@selector(onButtonDown:withEvent:)
    forControlEvents:UIControlEventTouchUpInside];

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

您可以在Cocoa Fundamentals Guide中阅读有关目标/动作模式的更多信息。

于 2012-01-22T21:20:13.260 回答