it-roy-ru.com

Почему мое событие "touch up in" для моего UIButton не вызывается?

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

Моя иерархия настроена так:

View -> Scroll View -> Subview -> Button

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

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

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

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

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

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

32
Architekt

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

48
Architekt

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

15
Ashutosh

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

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

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

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

11
Shawn Wang

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

Вид -> Подвид (UIView) -> Кнопка

Это фиксируется галочкой «Включено взаимодействие с пользователем» в атрибутах Subview (UIView).

4
Nianliang

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

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

Вы можете проверить это XCode 6 с помощью элемента управления «Debug View Heirachy».

3
Thomas Clowes

У меня было нечто подобное в последнее время;

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

1
MDB983
1
LML

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

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

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

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

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

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

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

0
Pic Mickael

Поиск проблемы:  

  • Убедитесь, что перед вашей кнопкой нет скрытого вида. 
  • Убедитесь, что взаимодействие с пользователем установлено на true.
0
ScottyBlades