代码之家  ›  专栏  ›  技术社区  ›  FranticRock

iOS9-UITableViewCellContentView正在覆盖单元格内的控件

  •  18
  • FranticRock  · 技术社区  · 9 年前

    我已经制作了一个名为“SwitchCell”的自定义UITableViewCell,它有一个开关。 仅在iOS9中,使用Xcode 7 beta,单元中的Content视图位于交换机的顶部。(请参见视图层次结构的屏幕截图。您可以清楚地看到单元格的内容视图位于其他视图之上。): enter image description here

    因此,所有与UISwitcher的接触都被拦截,IBAction不会启动。 在iOS8中,这不是问题。请参见iOS 8.4模拟器的屏幕截图。您可以看到控件顶部没有内容视图: enter image description here

    有人有这个问题吗? 我尝试从零开始重新制作NIB,但结果相同。

    我的NIB是一个自由大小的视图,没有状态栏。它有两个出口:一个用于UILabel,一个用于ISwitch。

    编辑:请确保检查下面的答案,以验证单元格的根视图不仅仅是UIView,而是UITableViewCell。这一问题也可能是其副作用。

    4 回复  |  直到 9 年前
        1
  •  18
  •   Jean-François Fabre    3 年前

    经过更多的调查和搜索,我在这里找到了我的解决方案: Button in UITableViewCell not responding under ios 7

    为我修复的是:

    cell.contentView.userInteractionEnabled = NO;
    

    这防止了单元格内容视图接管触摸事件,即使它位于其他视图之上。

    这个问题不仅发生在iOS9上,也发生在iOS7上。在iOS8中,内容视图位于控件后面。

        2
  •  4
  •   Alexandra    7 年前

    问题可能在您的单元格的.xib文件中。在separate.xib中创建单元格时,请确保拖动 UITableView单元格 在画布上, 非UIView .

        3
  •  4
  •   A.J. Hernandez    4 年前

    雨燕

    我的自定义tableviewcellswift文件中的按钮工作正常,但我升级到Xcode 12,然后突然无法访问它们(这意味着我的点击无法被识别)。单元格内容视图似乎干扰了层次结构,这样就救了我:

    cell.contentView.isUserInteractionEnabled = false
    

    我把这条线放在牢房里。

    感谢@FranticRock

        4
  •  2
  •   Gordonium    7 年前

    当我将一个单元格重新用作.xib时,我遇到了这个问题。我没有意识到,但当我第一次创建xib时,它创建的默认视图实际上是一个 UIView 而不是 UITableViewCell 似乎在某个阶段,UIKit在我的其他元素之上添加了内容视图,因此中断了某些事件(例如触摸事件)。

    我通过打开xib文件并拖动 UITableView单元格 将UI元素从旧视图复制到新单元格。

    之后,属性检查器中也提供了与 UITableView单元格 .