Нажмите "Распознаватель жестов" для просмотра, но не для дополнительного просмотра в 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 ответа

Я работал над тем же стилем системы. Я нашел, что это работает, если вы:

  1. Добавьте новый UIView как подпредставление основного UIView.
  2. Создайте другой UIView, в котором вы хотите использовать пользовательский интерфейс (это может быть таблица, такая как лист действий, средство выбора и т. Д.). Убедитесь, что это показано выше UIView в шаге 1.
  3. Зарегистрируйте UITapGestureRecognizer в UIView с шага 1.
  4. (Необязательно) Добавьте дополнительные кнопки (например, "Отмена" и "Готово") и установите делегата, который запускает ваш пользовательский контроллер.

Основной UIView (self.view) должен быть непрозрачным, чистым цветом с альфа-1. Полное подпредставление (см. Шаг 1) может быть любого цвета (я использовал светло-серый цвет), но отрегулируйте альфа-значение (для меня 0,5).

К сожалению, я не могу опубликовать изображение, потому что у меня еще недостаточно представителей на сайте.

Если вы используете IB и у вас возникают проблемы с получением отводов, проверьте в Инспекторе атрибутов (в разделе "Вид"), чтобы убедиться, что "Взаимодействие с пользователем" включено.

Вам нужно установить делегата

tapGesture.delegate = self.actionSheetView


//actionSheetView.m
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{
     return NO;
}
Другие вопросы по тегам