我有一个应用程序,在iOS 14出来之前。我停止使用Swift几个月,现在,模拟器正在运行iOS 14,从那时起,我遇到了一个问题,我在tableView单元格中的UIControl不注册抽头。
这是我的TableView(普通的,没有自定义或任何东西):
private let tableView: UITableView = {
let table = UITableView(frame: .zero, style: .plain)
table.translatesAutoresizingMaskIntoConstraints = false
table.backgroundColor = .white
table.separatorInset.right = table.separatorInset.left
return table
}()
字符串
这是我尝试设置点击手势的方式:
extension TodoListVC: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: todoCellIdentifier, for: indexPath) as! TodoCell
let todo = todoListViewModel.todos[indexPath.row]
cell.model = todo
cell.selectionStyle = .none
let checkBox = cell.checkbox
checkBox.index = indexPath.row
checkBox.addTarget(self, action: #selector(onCheckBoxValueChange(_:)), for: .valueChanged) // touchUpInside also does not work.
return cell
}
@objc func onCheckBoxValueChange(_ sender: UICheckBox) {
var todo = todoListViewModel.todos[sender.index]
todo.isDone = sender.isChecked
tableView?.reloadRows(at: [IndexPath(row: sender.index, section: 0)], with: .none)
todoListView.reloadProgress()
}
}
型
这个复选框是我从教程中复制的自定义UIControl,在iOS 14之前它工作得很好,现在我不知道它出了什么问题。文件是相当大的添加在这里,但如果这是必要的,我可以提供代码。
2条答案
按热度按时间7gyucuyw1#
转到你的
TodoCell
,并在你的initializer
中添加这个:字符串
它将再次开始工作。如果您没有编程创建单元格,则可以执行以下操作:
型
为了调试,你可以打印
contentView.isUserInteractionEnabled
的值,它会给予你布尔值,使用它你可以看到它是否是问题所在。最有可能的是,它将返回false
,上面的解决方案在iOS 14和Xcode 12上运行良好。rkttyhzu2#
此外,使用的
UIControl
中每个subview
的isUserInteractionEnabled
必须设置为false。字符串