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

Since Updating to xcode 12 I am not able to place any UIControl inside UITableViewCell

我有一个使用表格视图的搜索表单。今天更新 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 = 真

遇到了类似的问题,并且一直在解决这个问题...我的代码的问题是在 UITableViewCell 下我这样做了:

        didSet {
            if contentView.backgroundColor == backgroundColor { return }
            contentView.backgroundColor = backgroundColor
            for v in otherView.subview { v.backgroundColor = backgroundColor }
        }

在此处删除此行 contentView.backgroundColor = backgroundColor 成功了。单元格现在可见并且没有重复 contentView

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

的答案

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

希望这对某人有所帮助