2012-01-22 8 views
1

В .Net, когда у меня есть объект, который имеет событие я могу зарегистрироваться, чтобы справиться с этим событием с помощью делегата:Что такое Objective-C, эквивалентный делегату .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? В частности, я пытаюсь обрабатывать ccTouchEnded из SneakyButton. Я думал, что это будет примерно так:

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

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

ответ

2

Какао и КакаоТуш часто использует «Цель/действие».

  • Цель: объект objc. целью является обмен сообщениями.
  • Действие: a селектор. действие - это селектор для сообщения цели.

В этом смысле действие является эквивалентом.

Когда цель/действие выполняется, это заняло бы это вообще форму:

[target performSelector:action withObject:someParameter]; 

конечно, список параметров будет меняться в реальном мире.

Класс UIControl довольно мал - прочитайте его для получения дополнительной информации по этому вопросу. Это даст вам представление о поддержке цели/действия элемента управления и интерфейсах, которые вы будете использовать для обработки этих событий. NSControl является партнером Cocoa, но это гораздо более высокий класс - он определяет гораздо больше, чем интерфейсы Target/Action.

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

Смежные вопросы