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

Viewed 1744

I have a search form that uses a tableview. After updating Xcode 12 today the UISwitch, UITextField, UISlider no longer work when nested inside a UITableViewCell. Is there a property that has changed that I need to set to make this work again?

To be sure it wasn't just my project, I created a new project and nestled a UITextField inside of it and it doesn't work either.

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")
}
3 Answers

Your code was always wrong:

cell.addSubview(textField)

You must never add a subview to a cell. Add the subview to the cell's contentView.

The same happened to me since I upgraded to iOS 14. This has worked for me when I add the subViews directly to the cell,

cell.contentView.isUserInteractionEnabled = true

Had similar issue, and been going on around for it... what was issue with my code is that under UITableViewCell I was doing this:

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

Removing this line here contentView.backgroundColor = backgroundColor did the trick. Cell is now visible and there is no duplicated contentView

Maybe this will help someone, since I found only answers regarding adding subviews directly to cell instead to cell.contentView

EDIT 1: Okay, just wanted to update you on situation, issue was that my subviews where of type UIStackView and I had used subview where I actually should have used arrangedSubviews

Hope this will help someone

Related