UITapGestureRecognizer initWithTarget: действие: метод для принятия аргументов?
Я использую UITapGestureRecognizer
, потому что я использую UIScrollView
, который действует как контейнер для моих UILabel
s. В основном я пытаюсь использовать метод действия с аргументами, чтобы я мог, например. отправьте значение myLabel.tag
методу действия, чтобы узнать, какое действие нужно предпринять в зависимости от того, что UILabel было вызвано нажатием.
Один из способов сделать это - иметь столько методов действий, как UILabel
, но это не очень "симпатичный" код. То, что я хотел бы получить, - это просто один метод действия с операторами switch.
Возможно ли это, или я должен сделать это так (вздох):
UITapGestureRecognizer *myLabel1Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabel1Tap)];
[myLabel1Tap addGestureRecognizer:myLabel1Tap];
UITapGestureRecognizer *myLabel2Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabel2Tap)];
[myLabel1Tap addGestureRecognizer:myLabel2Tap];
UITapGestureRecognizer *myLabelNTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabelNTap)];
[myLabel1Tap addGestureRecognizer:myLabelNTap];
- (void)myLabel1Tap {
// Perform action
}
- (void)myLabel2Tap {
// Perform action
}
- (void)myLabelNTap {
// Perform action
}
Ответы
Ответ 1
Добавьте один вид распознавателя жестов в представление, которое представляет собой просмотр ваших различных меток:
UITapGestureRecognizer *myLabelTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabelTapHandler:)];
[myLabelParent addGestureRecognizer:myLabelTap];
Затем, когда вы обрабатываете жест, определите, какая метка была постукирована:
-(void)myLabelTapHandler:(UIGestureRecognizer *)gestureRecognizer {
UIView *tappedView = [gestureRecognizer.view hitTest:[gestureRecognizer locationInView:gestureRecognizer.view] withEvent:nil];
// do something with it
}
Ответ 2
Вы можете использовать только один UITapGestureRecognizer
и в вашем дескрипторе жестов (ваш myLaberXTap
), который имеет синтаксис:
- (void)handleGesture:(UITapGestureRecognizer*)gestureRecognizer {
...
}
используйте gesture.view
, чтобы узнать, с каким видом вы работаете.