Как получить button . tag через longPressGestureRecognizer?тег через longPressGestureRecognizer?

#iphone #cocoa-touch #button #tags #sender

#iPhone #cocoa-touch #кнопка #Теги #отправитель

Вопрос:

Я динамически добавляю кнопки изображения в некоторый scrollview. Все они указывают на один longPressHandler. Теперь, как мне узнать, какая кнопка была нажата? [Тег отправителя] выдает мне тег longGestureRecognizer, который я добавил к кнопке, и я не могу вручную установить этот тег.

 for (...) {
    UIButton *button = [[UIButton alloc] init];
    button.tag = w   h * 3; 
    [button addTarget:self action:@selector(imageButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    UILongPressGestureRecognizer *gest = [[UILongPressGestureRecognizer alloc]
                initWithTarget:self action:@selector(imageButtonLongPress:)];
    gest.minimumPressDuration = 1;
    gest.delegate = self;

    [button addGestureRecognizer:gest];
    [gest release];

    [scrollView addSubview:button];
    [button release];
}

- (void) imageButtonLongPress:(id)sender {  
    // how to get button tag here?
}
  

Ответ №1:

В view есть UIGestureRecognizer свойство, которое возвращает представление, к которому привязан распознаватель. Я думаю, что это ваш лучший выбор.

 - (void) imageButtonLongPress:(id)sender {  
    UIGestureRecognizer *recognizer = (UIGestureRecognizer*) sender;
    int tag = recognizer.view.tag;
}
  

Комментарии:

1. recognizer.view.tag выдает мне неправильный тег нажатой UIButton. Есть решение?

Ответ №2:

В вашем действии вы должны ввести приведение вашего отправителя к жесту, а затем ввести приведение его представления к кнопке, а затем получить тег кнопки как —

 UILongPressGestureRecognizer *gest = (UILongPressGestureRecognizer *)sender;
UIButton *button = (UIButton*)[gest view];
NSLog(@"%d",[button tag]);