Подтвердить что ты не робот

Кнопка в UITableViewCell не отвечает в соответствии с ios 7

У меня есть одно табличное представление, и каждая ячейка содержит одну кнопку. Он отлично работает со всеми версиями iOS, но я не знаю, что происходит. Ячейка построена в одном файле xib.

Может ли кто-нибудь дать мне несколько предложений? Спасибо заранее.

4b9b3361

Ответ 1

Что сработало для меня, так это:

contentView.userInteractionEnabled = NO;

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

Ответ 2

Вызов [cell bringSubviewToFront:button] после загрузки ячейки из nib решил это для меня.

Ответ 3

Я также боролся с этой проблемой, и я много исследовал различные ответы на stackoverflow и internet, решение отличается в зависимости от источника проблемы. В большинстве случаев вам необходимо выполнить следующие действия с элементом, который должен принять действие пользователя (нажмите/клик и т.д.):
myButton.userInteractionEnabled = YES;

В частности, для UILabel/UIImageView по умолчанию флаг userInteractionEnabled NO.

Если вы загружаете представление из xib, вам нужно убедиться, что из представления пользовательской ячейки, просмотра содержимого и элемента, который вы хотите активировать действие пользователя, все флажки отмечены флажком:
enter image description here

В приведенном выше примере элементы DeviceViewCell, Content View и Кнопка имеют " Взаимодействие с пользователем флажок установлен.
Если пользовательская ячейка реализована как подкласс класса UITableViewCell, и пользовательский вид ячейки загружается из другого xib файла динамически, вам нужно сделать еще одну вещь, которая запутывает большинство людей, но я объясню, почему позже: < ш > В пользовательском методе инициализации ячейки вам необходимо сделать следующее:
self.contentView.userInteractionEnabled = NO

где self - это подкласс UITableViewCell, который вы создали. Опять же, если пользовательская ячейка реализована как подкласс класса UITableViewCell, а пользовательский вид ячейки загружается из другого xib файла DYNAMICALLY, вам нужно сделать это выше. Вот объяснение:

self.contentView НЕ ТОЛЬКО Content View, который вы видите в Interface Builder, он создается системой как default content view, которая находится в TOP всех других представлений/элементов в вашем пользовательском представлении ячеек, и это скрывает остальная часть представлений в иерархии представлений. Следовательно, вам нужно будет отключить взаимодействие пользователя, прежде чем элементы пользовательского интерфейса в пользовательском представлении ячеек могут принимать события взаимодействия с пользователем. Надеюсь это поможет. Если у вас есть лучшее объяснение, я бы с удовольствием это услышал:-). Опять же, это мое наблюдение, и могут быть другие причины. Обсуждение приветствуется!

Ответ 4

Проблема заключается в том, что ваш nib не содержит контент-просмотр, как требуется, поскольку iOS 8 SDK (я пишу по опыту, не имею жизнеспособного источника, извините).

При добавлении UITableViewController в раскадровку автоматически добавляется UITableViewCell UITableView. Если вы посмотрите на это UITableView, вы увидите в нем contentView.

Итак, когда вы подклассифицируете UITableViewCell и создаете его с помощью .xib, вам нужно щелкнуть и перетащить UITableViewCell в xib вместо стандартного UIView. Затем не забудьте установить класс File Owner и класс UITableViewCell в ваш подкласс.

Ответ 5

У меня возникла одна и та же проблема. Оказывается, я создал объект UIView в IB, а затем назначил его классу подклассу UITableViewCell.

Поскольку объект, который я изначально создавал в IB, был UIView, контент-контент UITableViewCell не добавлялся до времени выполнения, что оказалось поверх моих UIButtons, что делало их недоступными.

Ответ 6

My Cell's outline

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

Все ярлыки (имя, категории и т.д.) сразу же отображаются в разделе "Просмотр содержимого". Веб-сайт WebsiteButton не находится под "Просмотр содержимого", но находится в "Ячейке таблицы локального каталога".

В моем методе tableViewController tableView: cellForRowAtIndexPath: У меня есть следующий код: cell.contentView.userInteractionEnabled = NO;

Это все, и пользователь может взаимодействовать с кнопкой. Я НЕ использую [cell bringSubviewToFront: cell.websiteButton];

Ответ 7

Очевидно, что есть несколько вещей, которые могут пойти не так, и некоторые исправления работают на некоторых версиях iOS, а не на других.

Моя проблема заключалась в том, что у меня был UIButton, который не был непосредственным подпунктом cell.contentView(т.е. был подчиненным подвью). Я должен был добавить свою кнопку непосредственно в cell.contentView, чтобы она была поддающейся отображению. (iOS v8 +)

Ответ 8

Решение этой проблемы;

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {    
cell.bringSubviewToFront(cell.YOUR_UIView)    
}

Это работает для меня.

Ответ 9

Как указывали другие, всегда добавляйте subviews в представление содержимого ячейки. Если вы переопределили метод layoutSubviews, обязательно вызовите супер-реализацию. Забытие вызова супер-реализации дает неожиданные результаты.

Ответ 10

У меня была такая же проблема с UIButton в ячейке прототипа в моей раскадровке. Я решил это, установив флажок "User Interaction Enabled" в ячейке прототипа. Это работало на iOS 7.1.

Ответ 11

У меня такая же проблема. Причина в том, что

self.contentView.Frame.size.height

всегда 44.

Есть предложение, что вы можете установить self.contentView.Frame в self.frame по методу перезаписи - (void)layoutSubviews проблема будет решена

Ответ 12

Самая очевидная ошибка, которую я не видел здесь, заключается в том, что у вас ДОЛЖЕН иметь selectedBackgroundImage для того, чтобы UIButton выглядел по-другому, когда был выбран. Это не похоже, например, на UITableViewCells.

myButton.setBackgroundImage(UIImage(named: "ButtonBackgroundSelected.png"), forState: .Highlighted)

Ответ 13

В моем случае мне нужно проверить "User Interaction Enabled" для самой ячейки (а не только для contentView). Но, как отмечено в других ответах, может быть несколько причин, почему это происходит, поэтому я уверен, что это не сработает для каждого случая.

enter image description here

Ответ 14

Я столкнулся с аналогичной проблемой как с UITableViewCell, так и с UICollectionViewCell. Несколько шагов:

  • Всегда добавляйте subviews в представление содержимого представления ячейки, а НЕ - представление ячейки.
  • Если вы добавляете представление контейнера (которое содержит вашу кнопку), отключите автоматическую компоновку представления контейнера и включите автоматический макет только для содержимого внутри представления контейнера. Используйте макет рамки для представления контейнера.

Короче говоря, Ячейки TableView/CollectionView не могут принимать подчиненные подпрограммы (UIButton, UISegmentedControl), которые включены в автоматическую компоновку. Если у вас есть необходимость в нем, отключите автомакеты и предоставите фреймы (или) поместите их в представление контейнера (в представлении контейнера должен быть отключен автоматический макет) и добавьте разрешенные виды (с автоматической компоновкой) в виде подзонов в виде контейнера.

Ответ 15

Когда вы используете построитель интерфейсов (Storyboard), установите флажок User Interaction Enabled с Content View

Ответ 16

Ни один из этих ответов не работал у меня.

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

Ответ 17

Хорошо, я нашел решение этой проблемы, но, похоже, это огромный взлом; тем не менее, это все, что я смог придумать (больше ничего здесь не работало для меня).

Overtop моего button Я добавил UITextField, который делегирует в рассматриваемую ячейку таблицы. Этот экземпляр tableViewCell реализует -(BOOL) textFieldShouldBeginEditing:(UITextField *)textField и возвращает NO.

Ответ 18

Проводной достаточно, на самом деле решение для меня - перейти в раскадровку, выбрать контент в ячейке и проверить "userInteractionEnabled"... в противном случае, даже если вы включили userInteraction на кнопке или ячейке, contentview всегда будет заблокировать действие.

Ответ 19

У меня был прозрачный вид на эту ячейку, которая реализовала некоторые внутренние функции и обрабатывала штрихи на себе.

Ответ 20

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