#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]);