Я думаю, вам нужно потратить некоторое время, чтобы внимательно прочитать код, построчно.
[inv performSelector:@selector(invokeWithTarget:) withObject:[self target] afterDelay:.5];
Это не делает то, что вы думаете.Через полсекунды после выполнения этого метода это произойдет:
[inv invokeWithTarget:[self target]];
Во-первых, у вашего класса CategoryButton
нет метода с именем target
.Во-вторых, почему задержка?Если вы используете эти прикосновения для прокрутки, задержка в 0,5 секунды будет чрезвычайно болезненной для пользователей.
Почему вы вообще используете класс NSInvocation?Если вам действительно нужна задержка, вы можете просто использовать метод performSelector:
в своем экземпляре CategoryButton
:
NSArray *params = [NSArray arrayWithObjects:touches, event, nil];
[self performSelector:@selector(handleTap:) withObject:params afterDelay:0.5];
Обратите внимание, что методы performSelector:
поддерживают только один аргумент, поэтому вам нужно обернуть их вNSArray.(В качестве альтернативы вы можете использовать NSDictionary.)
Вы должны будете обновить свой метод handleTap:
, чтобы он принимал NSArray / NSDictionary и, если необходимо, выявлял аргументы.
Но, опять же, еслине нужно откладывать, почему бы просто не вызвать метод самостоятельно:
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
UITouch *theTouch = [touches anyObject];
switch ([theTouch tapCount])
{
case 1:
[super touchesBegan:touches withEvent:event];
break;
}
}
Возможно, я неправильно понимаю ваши намерения, но, похоже, вы делаете этот путь более сложным, чем нужно.