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:
在上面的例子中, DeviceViewCell , Content View和Button元素都选中了“ 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上遇到类似的问题。 几个步骤遵循:
- 总是将子视图添加到单元格视图的内容视图中,而不是单元格视图本身
- 如果要添加容器视图(其中包含button),请禁用容器视图的自动布局,并仅为容器视图内的内容启用自动布局。 为容器视图使用框架布局。
简而言之,TableView / CollectionView单元格不能执行自动布局启用的可操作的子视图(UIButton,UISegmentedControl)。 如果您需要,可以禁用自动布局并提供框架(或)将其放在容器视图中(容器视图应禁用自动布局),并将可操作视图(使用自动布局)作为子视图添加到容器视图。
当您使用Interface Builder(Storyboard)时,请确保从Content View
选中User Interaction Enabled
了User Interaction Enabled
checkbox
这些答案都没有为我工作。
我能够解决这个问题的唯一方法是将表格单元格select从单个设置为无。 之后,我能够收到button回电。
好的,我已经find了解决这个问题的办法,但似乎是一个巨大的破解。 然而,这是我能够想出的(没有别的在这里为我工作)。
我的button
超越我已经添加了一个UITextField,委托给表格视图单元格。 tableViewCell实例实现-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
并返回NO
。
对于我来说实际的解决scheme是去故事板,select单元格中的contentview,然后检查“userInteractionEnabled”…否则,即使您已经启用button或单元格的userInteraction,contentview将始终阻止操作。
我对那个实现了一些内部特征并且自我处理的单元有了透明的看法。
我检查了一切,但我做了一个愚蠢的错误在故事板我的button的超级视图下面的一些其他的看法。 所以触摸不通过我的button。