在.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");
}
答案 0 :(得分:2)
Cocoa和CocoaTouch经常使用“目标/行动”。
从这个意义上说,动作是等效的。
执行目标/操作时,将采用此常规形式:
[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