Нажмите "Распознаватель жестов" для просмотра, но не для дополнительного просмотра в CustomView
Я создал customViewController, чтобы действовать как customActionsheet. В этом customViewController у меня есть UIView в качестве основного вида (self.view) и IBOutlet UIView, который является листом пользовательских действий (actionSheetView). То, что я пытаюсь сделать, это заставить этот лист настраиваемых действий вести себя как обычный лист действий, где, если вы коснетесь темной области, в моем случае это вид с фоном черного цвета и альфа 5.0. Вот что у меня есть:
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(slideOut)];
tapGesture.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapGesture];
Проблема заключается в том, что подпредставление, представление листа настраиваемых действий, также получает всплывающую подсказку, поэтому нажатие на что-либо в actionSheetView получит жест касания. Я пробовал несколько вещей, как - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
а также self.actionSheetView.userInteractionEnabled = NO;
но оба, похоже, не работают. Кто-нибудь имеет представление о том, как я могу сделать self.view доступным, но отключить этот жест для self.actionSheetView? Любые советы, рекомендации или помощь с благодарностью. Заранее спасибо.
2 ответа
Я работал над тем же стилем системы. Я нашел, что это работает, если вы:
- Добавьте новый UIView как подпредставление основного UIView.
- Создайте другой UIView, в котором вы хотите использовать пользовательский интерфейс (это может быть таблица, такая как лист действий, средство выбора и т. Д.). Убедитесь, что это показано выше UIView в шаге 1.
- Зарегистрируйте UITapGestureRecognizer в UIView с шага 1.
- (Необязательно) Добавьте дополнительные кнопки (например, "Отмена" и "Готово") и установите делегата, который запускает ваш пользовательский контроллер.
Основной UIView (self.view) должен быть непрозрачным, чистым цветом с альфа-1. Полное подпредставление (см. Шаг 1) может быть любого цвета (я использовал светло-серый цвет), но отрегулируйте альфа-значение (для меня 0,5).
К сожалению, я не могу опубликовать изображение, потому что у меня еще недостаточно представителей на сайте.
Если вы используете IB и у вас возникают проблемы с получением отводов, проверьте в Инспекторе атрибутов (в разделе "Вид"), чтобы убедиться, что "Взаимодействие с пользователем" включено.
Вам нужно установить делегата
tapGesture.delegate = self.actionSheetView
//actionSheetView.m
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
return NO;
}