ios 14 个带有 textField 的 Tableview 单元格不工作
ios 14 Tableview cell with textField not working
在 iOS 14 带有 textField 的 TableView 不工作。有人有解决办法吗?
示例代码如下:
class TestController: UIViewController {
let tableView: UITableView = {
let tableView = UITableView(frame: .zero, style: .grouped)
return tableView
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .green
view.addSubview(tableView)
tableView.edgesToSuperview()
tableView.backgroundColor = .gray
tableView.register(TestCell.self, forCellReuseIdentifier: TestCell.reuseID)
tableView.dataSource = self
}
}
extension TestController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TestCell.reuseID, for: indexPath)
return cell
}
}
class TestCell: UITableViewCell {
let textField = UITextField()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
backgroundColor = .red
addSubview(textField)
textField.height(50)
textField.backgroundColor = .blue
textField.edgesToSuperview()
selectionStyle = .none
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
相同的代码适用于 iOS 13 但不适用于 iOS 14。有人解决了这个问题吗? (Xcode 版本 12.0 (12A7209))
您不应在单元格中直接使用 addSubview,而应将其添加到 ContentView 中:
contentView.addSubview(textField)
这应该可以解决您的问题
在 iOS 14 中,UITableViewCellContentView 层次结构不同。
在 tableView(_:cellForRowAt:) 中,而不是像这样做:
cell.addSubview(textField)
改为:
cell.contentView.addSubview(textField)
在 iOS 14 带有 textField 的 TableView 不工作。有人有解决办法吗?
示例代码如下:
class TestController: UIViewController {
let tableView: UITableView = {
let tableView = UITableView(frame: .zero, style: .grouped)
return tableView
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .green
view.addSubview(tableView)
tableView.edgesToSuperview()
tableView.backgroundColor = .gray
tableView.register(TestCell.self, forCellReuseIdentifier: TestCell.reuseID)
tableView.dataSource = self
}
}
extension TestController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TestCell.reuseID, for: indexPath)
return cell
}
}
class TestCell: UITableViewCell {
let textField = UITextField()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
backgroundColor = .red
addSubview(textField)
textField.height(50)
textField.backgroundColor = .blue
textField.edgesToSuperview()
selectionStyle = .none
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
相同的代码适用于 iOS 13 但不适用于 iOS 14。有人解决了这个问题吗? (Xcode 版本 12.0 (12A7209))
您不应在单元格中直接使用 addSubview,而应将其添加到 ContentView 中:
contentView.addSubview(textField)
这应该可以解决您的问题
在 iOS 14 中,UITableViewCellContentView 层次结构不同。
在 tableView(_:cellForRowAt:) 中,而不是像这样做:
cell.addSubview(textField)
改为:
cell.contentView.addSubview(textField)