Передать метод в качестве аргумента - PullRequest
3 голосов
/ 13 октября 2011

я могу передать метод в качестве аргумента? Мне не удается передать метод targetOpenView в следующем примере:

-(void) targetTimeView:(id)sender {    
[self TimeViewWithtimeInterval:.6 selector:targetOpenView]; //targetOpenView does NOT work
}

-(void) timeViewWithtimeInterval:(float)interval selector:openViewMethod{
[NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(openViewMethod) userInfo:nil repeats:NO];   
}

Любые предложения, как я мог бы сделать эту работу? Спасибо!

1 Ответ

6 голосов
/ 13 октября 2011

Вам нужна директива компилятора @selector, чтобы извлечь выбор из имени метода, как вы это делали при создании таймера:

[self TimeViewWithtimeInterval:.6 selector:@selector(targetOpenView)];

И задать свой аргумент для типа SEL:

-(void) TimeViewWithtimeInterval:(float)interval selector:(SEL)openViewMethod
{    
 ...
}

Затем при передаче аргумента методу NSTimer вы можете пропустить @selector, поскольку тип уже является селектором:

[NSTimer scheduledTimerWithTimeInterval:interval target:self
                               selector:@selector(openViewMethod) /* here */
                               userInfo:nil repeats:NO];   

[NSTimer scheduledTimerWithTimeInterval:interval target:self
                               selector:openViewMethod /* pass it directly */
                               userInfo:nil repeats:NO];
...