Почему мое событие "прикоснуться внутрь" для моего UIButton не называется?

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

Моя иерархия настроена следующим образом:

View -> Scroll View -> Subview -> Button

В этом подсмотре есть много других предметов, и каждый из них работает при касании. В конструкторе интерфейса я вижу, что событие "Touch Up Inside" привязано к моему методу

"- (IBAction)favoritesButtonDepressed:(id)sender".

Однако, когда я нажимаю кнопку, этот метод никогда не выполняется, и моя точка останова впоследствии не попадает.

Я заметил, что даже когда я удерживаю нажатие на кнопку, ярлык не меняет цвет (даже несмотря на то, что нажимает на подсветку включен), но все же моя другая кнопка в представлении делает.

Взаимодействие с пользователем включено на кнопке, а также на все иерархии.

Для того, чтобы мои объекты в суб-представлении получали события касания, я сделал вид прокрутки похожим на 4-й ответ в этом сообщении.

Ответ 1

Ага, я понял. Оказывается, подвид, содержащий содержащую кнопку (вместе с другими элементами управления), имел высоту 740, а кнопка была у Y 781. Перемещая кнопку вверх, проблема была устранена. Поскольку все отображалось правильно, я не думал проверять высоту подзаголовка.

Ответ 2

Я думаю, что вы поместили свою кнопку в UIImageView, если это так, вам нужно включить UserInteraction для этого UIImageView. Пожалуйста, проверьте.

Ответ 3

Если UITapGestureRecognizer реализован на любом из Super View вашей кнопки. то UIButtonEventTouchUpInside будет запущен.

вы должны реализовать UITapGestureRecognizer, как это

tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
[tapGesture setCancelsTouchesInView:NO]; // This should do what you want
[tapGesture setDelegate:self];

Ответ 4

Убедитесь, что ваша кнопка находится внутри границ супервизора,
Если кнопка находится вне границ супервизора, кнопка не будет кликабельна,
из-за реализации функции hitTest

Ответ 5

Наличие макета выглядит так:

Просмотр → Subview (UIView) → Кнопка

Исправлено отметкой "Включено взаимодействие с пользователем" в атрибутах Subview (UIView).

Ответ 6

Еще одна вещь, которую стоит рассмотреть, - разместить на ней другой вид?

Например, если вы загрузите другой вид из наконечника и неправильно сфотографируете его, он может хорошо появиться поверх кнопки, перехватив любые нажатия.

Вы можете проверить это XCode 6 с контролем "Debug View Heirachy".

Ответ 7

Недавно у меня было что-то подобное;

Попробуйте удалить (IBAction)favoritesButtonDepressed:(id)sender объявление (IBAction)favoritesButtonDepressed:(id)sender (и метод) в вашем контроллере и снова перетащить его из интерфейса Builder.

Ответ 8

Пожалуйста, ознакомьтесь со следующими обсуждениями, которые могут помочь вам в работе UIButton "Touch Up Inside" не работает. "Touch Down" отлично работает

UIButton касается внутри события, не работающего в ios5, пока все в порядке в ios6

Событие UIButton "Touch Up Inside" не работает. "Touch Down" отлично работает

Ответ 9

В моем случае IBAction для кнопки не работал, я пытался разными способами. Таким образом, я сделал IBOutlet для кнопки и добавил действие щелчка, используя метод "addTarget", который работал как шарм.

[myButton addTarget:self action:@selector(dismissClickFunction:) forControlEvents:UIControlEventAllEvents];

Ответ 10

У меня такая же проблема.

У меня была кнопка в xib, которую я поместил в представление.

Я оставил экземпляр xib с его маленьким размером по умолчанию, установленным при импорте, потому что я автоматически изменяю его размер в коде для обработки поворота устройства.

Это привело к тому, что кнопка не реагировала на прикосновения, даже если она находилась в центре экрана.

Я исправил это, просто изменив расположение экземпляра xib, чтобы заполнить родительское представление.