UIButton за UIScrollView

У меня есть UIButton за UIScrollView. Фон прокрутки прозрачный, а кнопка находится в правом нижнем углу. Так что это видно.

Проблема в том, что UIButton не реагирует на какие-либо события касания, когда он находится ниже свитка. Что потребовало бы, чтобы он реагировал на события касания в этом сценарии?

спасибо

На самом деле вы можете это сделать, я сделал это на Mac, имел дело с передачей событий. Поиск в Интернете вы можете найти некоторые указатели. Я помню, мне потребовалось некоторое время, чтобы решить это некоторое время назад.

Вы должны использовать метод + touchhesBegan для передачи касаний к следующему объекту.
Вот пример того, как вы это сделаете:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { printf("MyButton touch Began\n"); [self.nextResponder touchesBegan:touches withEvent:event]; } 

Вот еще информация об цепочке ответчиков:

  1. Немного о цепочке ответчиков (http://iphonedevelopment.blogspot.com)

  2. Комплектования приложений какао для iOS: объект ответчика (http://developer.apple.com)

У меня была эта проблема сегодня, так как много времени на исследование довольно сложно достичь, потому что вы можете потерять способность перетаскивания в обмен на событие нажатия кнопок.

Однако: я закончил с этим подклассом UIScrollView, который получает кнопку или кнопки, на которые он заинтересован, чтобы поймать событие.

Ключ должен использовать [(UIControl *) view sendActionsForControlEvents: UIControlEventTouchUpInside]; , потому что вызов метода touchesBegan не всегда работает так, как ожидалось. Это не изменит графический интерфейс при нажатии кнопки, но вы можете реализовать это по мере необходимости в пользовательском методе.

 @implementation ForwardScrollView @synthesize responders = _responders; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code _touchesEnabled = YES; } return self; } - (id)initWithCoder:(NSCoder *)aDecoder { if ( self = [super initWithCoder: aDecoder]) { _touchesEnabled = YES; } return self; } - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { return _touchesEnabled; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { _touchesEnabled = NO; UIWindow *window = [UIApplication sharedApplication].delegate.window; for(UITouch *touch in touches) { CGPoint point = [touch locationInView:self]; point = [window convertPoint:point fromView:self]; UIView *view = [window hitTest:point withEvent:event]; UITouch* touch = [touches anyObject]; UIGestureRecognizer* recognizer; if ([touch gestureRecognizers].count > 0) { recognizer = [touch gestureRecognizers][0]; } if ( (!recognizer || ![recognizer isMemberOfClass:NSClassFromString(@"UIScrollViewPanGestureRecognizer")]) && [_responders containsObject: view]) { [(UIControl*)view sendActionsForControlEvents: UIControlEventTouchUpInside]; } } _touchesEnabled = YES; } @end 

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

Возможно, лучший подход – поставить подкласс UIView (вместо UIButton) как subview в UIScrollView и добавить на них UITapGestureRecognizer.

Для новичков, таких как я, которые приходят искать помощь, вот как вы это делаете в Storyboard: перетащите кнопку на тот же уровень, что и scrollView, и убедитесь, что кнопка НИЖЕ scrollView – порядок имеет значение! Чем ниже положение, тем выше уровень представления

Вы можете попробовать это. U нужно добавить кнопку в подвью после добавления вашего scrollview.

….

[myView addSubview: myScrollView];

…..

[myView addSubview: myButton];

Если вы делаете это в IB, вам просто нужно перетащить кнопку ниже вашего scrollview …

Если UIButton находится за UIScrollView , он не может реагировать на касания, потому что на пути UIScrollView ! Поместите UIButton в UIScrollView или уменьшите UIScrollView чтобы он больше не мешал кнопке.

  • Включить пейджинг в UIScrollView после масштабирования
  • Как я могу настроить размер UIScrollView в соответствии с контентом
  • UITableView в UIScrollView - как сделать прокрутку вида, но не TableView сам по себе?
  • Как прокрутить UICollectionViewCell программно в IOS?
  • UICollectionView Принесите элемент в центральное положение
  • Как добавить в просмотр прокрутки несколько UITableviewController?
  • Могу ли я отключить / отредактировать прокрутку автоматического перехода в верхнее положение при нажатии строки состояния?
  • UITableView останавливает прокрутку при добавлении новых строк
  • Как добавить несколько UIImageViews для подкачки UIScrollView?
  • Почему в UIScrollView не должно быть UIWebView?
  • iOS 7 Collection Просмотр внутри Scroll View
  • Interesting Posts

    UIPickerView изменяет размер текста текста после загрузки содержимого в сборщик

    iOS 8 – Как определить приложение переднего плана, а также получить список запущенных приложений

    Настройте предложения быстрого типа в iOS Keyboard

    Не удалось загрузить сертификат APN разработки

    Установка стабильной сборки Cocoapods pod

    Использование настраиваемого макета Причиняет функцию displayViewFlowLayout делегата, не вызываемую

    ViewController отвечаетSoSelector: сообщение отправлено на освобожденный экземпляр (CRASH)

    Ошибка домена = NSURLErrorDomain Code = -1003 «Сервер с указанным именем хоста не найден

    Как реализовать физический эффект в SimCity 5, что здание качается, когда оно перемещается?

    200 + Предупреждения GenerateDSYMFile в xcode 7

    Как установить UIPickerView в отличие от индекса по умолчанию?

    как изменить высоту UINavigationBar

    Как связать (opus) внешний / сторонний кодек с pjsip для ios

    iPhone / iPad Table View Reload Only One Row вместо всей таблицы

    Невозможно выполнить переход с помощью дополнительного индикатора

    Давайте будем гением компьютера.