Я добавил TapGestureRecognizer в свой self.view:
tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
[self.view addGestureRecognizer:tap];
[tap release];
Представление содержит один UIScrollView с изображениями и метками. Я хочу определить, нажимает ли пользователь ярлык или нет.
- (void)singleTap:(UIGestureRecognizer*)gestureRecognizer {
CGPoint pt = [gestureRecognizer locationInView:self.view];
UIView *v = [self.view hitTest:pt withEvent:nil];
if ([v isKindOfClass:[UILabel class]]) {
NSLog(@"label!");
return;
}
// else do other stuff if its not a label
Однако я не вижу этикетки! в моем журнале.
2 ответа
Я думаю, это потому, что userInteractionEnabled
по умолчанию NO
на UILabel
s. Попробуйте включить это.
РЕДАКТИРОВАТЬ: На самом деле это было предположение, но просто чтобы подтвердить, Apple сообщает о состоянии [UIView hitTest:withEvent:]
:
Этот метод игнорирует скрытые объекты просмотра, для которых отключено взаимодействие с пользователем или для которых альфа-уровень меньше 0,01.
Ваши подпредставления, такие как сами ярлыки, фактически скрывают действия пользователя от основного представления.
Почему бы вам не добавить распознаватели жестов к своим ярлыкам. В качестве альтернативы вы можете использовать UIButton для меток.
Или -
Если вы не хотите определять, какая метка была затронута, вы можете добавить невидимое представление (пустое представление, ни скрытое, ни одно с альфа = 0) поверх всех меток и добавить к ним распознаватели жестов.
Похожие вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].