UITapGestureRecognizer initWithTarget: action: метод для получения аргументов? - PullRequest
11 голосов
/ 09 июля 2011

Я использую UITapGestureRecognizer, потому что я использую UIScrollView, который действует как контейнер для моих UILabel с.В основном я пытаюсь использовать метод действия с аргументами, чтобы я мог, например, отправить myLabel.tag значение в метод действия, чтобы узнать, какое действие предпринять в зависимости от того, что UILabel было вызвано касанием.

Oneспособ сделать это состоит в том, чтобы иметь столько же методов действия, сколько UILabel s, но это не очень «красиво» в коде.Чего я хотел бы добиться, так это просто иметь один метод действия с операторами 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
}

Ответы [ 2 ]

18 голосов
/ 09 июля 2011

Добавьте один распознаватель жестов к представлению, которое является суперпредставлением ваших различных меток:

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
}
5 голосов
/ 09 июля 2011

Вы можете использовать только один UITapGestureRecognizer и в вашем обработчике жестов (ваш myLaberXTap), который имеет синтаксис:

 - (void)handleGesture:(UITapGestureRecognizer*)gestureRecognizer {
     ...
 } 

используйте gesture.view, чтобы узнать, над каким видом вы работаете.

...