UITableViewCell中的button不响应下ios 7

我有一个tableview,每个单元格包含一个button。 它工作得很好所有的iOS版本,但7。我不知道发生了什么事情。 单元格构build在一个xib文件中。

任何人都可以给我一些build议吗? 提前致谢。

这对我有效:

contentView.userInteractionEnabled = NO; 

从nib加载我的自定义单元格后调用。 看起来这个内容视图是在创build在nib文件中定义的视图之后创build的,并且被设置为一个顶层的子视图。

从nib加载单元格后调用[cell bringSubviewToFront:button]解决了这个问题。

我也一直在努力解决这个问题,并且在stackoverflow和internet上的不同答案上做了大量的研究,根据问题的根源,解决scheme是不同的。 对于大多数情况下,您需要使用应该执行用户操作的元素(点击/单击等)执行以下操作:
myButton.userInteractionEnabled = YES;

特别是对于UILabel / UIImageView,默认情况下, userInteractionEnabled标志为NO

如果从xib加载视图,则需要确保从自定义单元格视图,内容视图和要启用用户操作的元素都已选中checkbox:
在这里输入图像说明

在上面的例子中, DeviceViewCellContent ViewButton元素都选中了“ User Interaction Enabled ”checkbox。
如果自定义单元格是作为UITableViewCell的子类实现的,而且自定义单元格视图是从另一个xib文件dynamic加载的,那么您必须做另外一件让大多数人感到困惑的事情,但是我将在以后解释为什么:
在自定义单元格的初始化方法中,您需要执行以下操作:
self.contentView.userInteractionEnabled = NO

self是您创build的UITableViewCell的子类。 再次,如果自定义单元格被实现为UITableViewCell的子类,并且自定义单元格视图是从另一个xib文件dynamic加载的,则需要执行上述操作。 这里是解释:

self.contentView与您在界面生成器中看到的Content View不一样,它是由系统创build的default content view ,位于您的自定义单元视图中的每个其他视图/元素的顶部,并且遮挡其余视图视图层次结构。 因此,在自定义单元视图中的UI元素可以接收用户交互事件之前,您需要禁用用户交互。 希望这可以帮助。 如果你有更好的解释,我很乐意听到它:-)。 我的观察也是一样,可能还有其他原因。 欢迎讨论!

问题是,你的笔尖没有包含contentView,因为iOS 8 SDK(我正在写经验,没有一个可行的来源,抱歉)的要求。

UITableViewController添加到故事板时,UITableViewCell会自动添加到UITableView 。 如果你看看这个UITableView ,你会看到一个contentView

所以当你inheritance一个UITableViewCell并用.xib创build它时,你必须点击UITableViewCell拖动到xib而不是默认的UIView 。 然后不要忘记将文件所有者类和UITableViewCell类设置为您的子类。

我遇到了同样的问题。 原来我在IB中创build了一个UIView对象,然后将它的类设置为UITableViewCell的一个子类。

由于我最初在IB创build的对象是一个UIView,所以UITableViewCell contentView直到运行时才被添加,这恰好在我的UIButton上,使得它们不可选。

我的手机的轮廓

就我而言,我希望用户进行交互的所有内容都在ContentView之外。 另外我不希望单元格被选中时突出显示。

所有标签(名称,类别等)都立即在“内容视图”下。 WebsiteButton不在“内容视图”下,但在“本地目录表单元”下。

在我的tableViewController方法tableView:cellForRowAtIndexPath:我有以下代码:cell.contentView.userInteractionEnabled = NO;

这就是全部,用户可以与button进行交互。 我不使用[cell bringSubviewToFront:cell.websiteButton];

很明显,有很多事情可能会出错,有些修复工作在某些iOS版本上,而不是在其他版本上。

我的问题是,我有一个UIButton不是cell.contentView的直接子视图(即它是子视图的子视图)。 我不得不将我的button直接添加到cell.contentView,以便它可以点击。 (iOS v8 +)

解决这个问题的方法是

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

这对我有用。

我在故事板的原型单元格中遇到了与UIButton相同的问题。 我通过检查原型单元格上的“User Interaction Enabled”来解决这个问题。 这在iOS 7.1上工作。

我一直得到同样的问题。 原因是

 self.contentView.Frame.size.height 

总是44。

有一个build议,你可以设置self.contentView.Frame self.frame在覆盖方法 – (void)layoutSubviews问题将得到解决

我没有看到这里描述的最明显的错误是你必须有一个selectedBackgroundImage UIButtonselect时看起来不同。 这些不像UITableViewCells。

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

正如其他人指出的,总是添加子视图到单元格的内容视图。 如果您重写了layoutSubviews方法,请确保调用超级实现。 忘记调用超级实现会产生意想不到的结果。

在我的情况下,我需要检查“用户交互启用”的单元格本身(而不仅仅是contentView)以及。 但正如其他答案所指出的那样,为什么会发生这种情况可能有多种原因,所以我相信这不适用于每一种情况。

在这里输入图像说明

我在UITableViewCell和UICollectionViewCell上遇到类似的问题。 几个步骤遵循:

  1. 总是将子视图添加到单元格视图的内容视图中,而不是单元格视图本身
  2. 如果要添加容器视图(其中包含button),请禁用容器视图的自动布局,并仅为容器视图内的内容启用自动布局。 为容器视图使用框架布局。

简而言之,TableView / CollectionView单元格不能执行自动布局启用的可操作的子视图(UIButton,UISegmentedControl)。 如果您需要,可以禁用自动布局并提供框架(或)将其放在容器视图中(容器视图应禁用自动布局),并将可操作视图(使用自动布局)作为子视图添加到容器视图。

当您使用Interface Builder(Storyboard)时,请确保从Content View选中User Interaction EnabledUser Interaction Enabledcheckbox

这些答案都没有为我工作。

我能够解决这个问题的唯一方法是将表格单元格select从单个设置为无。 之后,我能够收到button回电。

好的,我已经find了解决这个问题的办法,但似乎是一个巨大的破解。 然而,这是我能够想出的(没有别的在这里为我工作)。

我的button超越我已经添加了一个UITextField,委托给表格视图单元格。 tableViewCell实例实现-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField并返回NO

对于我来说实际的解决scheme是去故事板,select单元格中的contentview,然后检查“userInteractionEnabled”…否则,即使您已经启用button或单元格的userInteraction,contentview将始终阻止操作。

我对那个实现了一些内部特征并且自我处理的单元有了透明的看法。

我检查了一切,但我做了一个愚蠢的错误在故事板我的button的超级视图下面的一些其他的看法。 所以触摸不通过我的button。