2016-12-29 2 views
2

Это кажется немного странной проблемой. У меня есть UIButton в итерированном tableViewCell в tableView, который был размещен в обычном ViewController. По какой-то причине он выглядит только щелчком (подсветка синего цвета по умолчанию на светло-голубом кратковременно, а затем снова на синем) при длительном нажатии. Он выполняет любое действие, которое я ему назначил (только началось с обычной старой инструкции печати) при обычном щелчке, но просто не посмотреть нажал. Кто-нибудь знает, как это исправить? Кнопка в нормальном состоянии: Button in its normal stateUIbutton только просматривает clicked (выделено) на longPress?

кнопка после нажатия:

Button after being clicked

Кнопка после долго нажата (извините, пришлось сфотографировать с телефоном для этого)

enter image description here

Редактировать: Это отличается от ответов в вопросе iOS7, потому что я ищу iOS 10 swift, поэтому не объективно-с. Nor iOS7

+1

Не могли бы вы добавить скриншоты или gif, чтобы показать, что происходит? Я не могу сказать из вашего описания, что происходит. – Jadar

+0

@Jadar, я разместил соответствующие фотографии. Нормальное состояние и после одной кнопки щелчка выглядят одинаково. Только после долгого нажатия он становится подсвеченным (и становится светлее), а затем возвращается к нормальному цвету состояния после отпускания –

+0

Возможный дубликат [UIButton, не показывающий подсветку при нажатии в iOS7] (http://stackoverflow.com/questions/19256996/uibutton-not-show-highlight-on-tap-in-ios7) – Jadar

ответ

1

Это нормальное поведение. Это связано с свойством UIScrollView delaysContentTouches. Per от Apple docs:

Если значение этого свойства YES, задержки вида прокрутки обработки сенсорного вниз жеста, пока он не может определить, если скроллинг является намерением. Если значение НЕТ, просмотр прокрутки сразу вызывает touchsShouldBegin: withEvent: inContentView :.

EDIT: This answer дает нижеследующее решение. Я тестировал его, и он работает. Однако, поскольку он делает магию магии, я бы не рекомендовал вам на самом деле делать это, потому что это неизбежно нарушится, когда Apple решит изменить свою иерархию представлений за кадром.

tableView.delaysContentTouches = false 
for case let x as UIScrollView in tableView.subviews { 
    x.delaysContentTouches = false 
} 

OLD ОТВЕТ: This answer дает решение, но это на самом деле взломать и может вызвать ваше приложение, чтобы получить отвергнуто Apple, из-за его использование частных классов. Поскольку поведение действительно является особенностью, я бы рекомендовал вам оставить его как есть.

+0

Я не уверен, что это имеет смысл; сразу же вызывается действие кнопок, а только экран подсветки, который не происходит. Если он по существу ждет приложения, чтобы определить, есть ли его свиток или нет, почему это действие называется сразу? Кроме того, в 'tableViewController' (этот сценарий для вопроса представляет собой« tableView », помещенный в« ViewController »), этого не происходит.Нет задержки, и кнопка может быть сразу же нажата. –

+0

Любопытно, что действие обрабатывается, но пользовательский интерфейс задерживается. Однако, когда я тестировал, я сделал это с UITableViewController, и я видел задержку. – Jadar

+0

Так что я думаю, что это связано с различными UIScrollViews, используемыми UITableView. Независимо от того, как он создан. – Jadar