由于更新到xcode 12,我无法在UITableViewCell内放置任何UIControl

由于更新到xcode 12,我无法在UITableViewCell内放置任何UIControl,uitableview,uicontrol,xcode12,Uitableview,Uicontrol,Xcode12,我有一个使用tableview的搜索表单。今天更新了Xcode 12之后,当UISwitch、UITextField、UISlider嵌套在UITableViewCell中时,将不再工作。是否有一个属性已更改,我需要设置该属性以使其再次工作 为了确保这不仅仅是我的项目,我创建了一个新项目,并在其中嵌套了一个UITextField,但它也不起作用 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: In

我有一个使用tableview的搜索表单。今天更新了Xcode 12之后,当UISwitch、UITextField、UISlider嵌套在UITableViewCell中时,将不再工作。是否有一个属性已更改,我需要设置该属性以使其再次工作

为了确保这不仅仅是我的项目,我创建了一个新项目,并在其中嵌套了一个UITextField,但它也不起作用

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    
    let textField = UITextField(frame: CGRect(x: 5, y: 5, width: 400.0, height: 25.0))
    textField.delegate = self
    textField.backgroundColor = .blue
    cell.addSubview(textField)

    return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("this will get called even when selecting the UITextField")
}

func textFieldDidBeginEditing(_ textField: UITextField) {
    print("this is never called")
}

您的代码总是错误的:

cell.addSubview(textField)

决不能将子视图添加到单元格中。将子视图添加到单元格的
contentView

自升级到iOS 14以来,我也遇到了同样的情况。 当我将子视图直接添加到单元格时,这对我很有效


cell.contentView.isUserInteractionEnabled=true有类似的问题,并且一直在努力解决。。。我的代码的问题是,在UITableViewCell下,我正在执行以下操作:

        didSet {
            if contentView.backgroundColor == backgroundColor { return }
            contentView.backgroundColor = backgroundColor
            for v in otherView.subview { v.backgroundColor = backgroundColor }
        }
在这里删除这一行就成功了。单元格现在可见,并且没有重复的
contentView

也许这会对某些人有所帮助,因为我只找到了关于将子视图直接添加到
cell
而不是
cell.contentView

编辑1: 好的,我只是想告诉你们最新情况,问题是我的子视图类型是
UIStackView
,我使用了
subview
,我实际上应该使用
arrangedSubviews


希望这将有助于某人

出色的捕获,这是我的问题。我猜iOS 14中
contentView
交互的默认行为已经改变!但最好还是不要直接在单元格中添加子视图。我认为这没有意义。是否希望
cell.contentView.isUserInteractionEnabled=false
,因为Xcode 12构建应用程序将contentView置于顶部,它可以处理触摸事件,并使您的其他视图无法获取触摸事件。正如@matt正确回答的那样,您错误地将自定义视图添加为单元格本身的直接子视图,而不是作为单元格的
contentView
中的子视图。这导致Xcode 12和iOS 14出现问题的原因是,当第一次访问
contentView
属性时,默认单元格
contentView
会延迟创建,而不是在init中创建,这意味着它最终会添加到自定义视图顶部的单元格中(首先不应该是单元格的子视图)。只需将代码更新为
cell.contentView.addSubview(…)
相反。是的!但我正在处理一个旧项目,该项目将子视图直接添加到tableview单元格,而不是内容视图。当我使用Xcode 12构建项目时,我感到非常震惊,因为该应用程序在许多地方都没有响应。@我的猜测是,自从在iOS 2中引入contentView以来,将视图添加到内容视图总是正确的entView取代了手机本身,但在过去更容易逃脱。如此小的细节却让我免于很多痛苦!!恭喜@matt!