我在这样创建的测试项目中有UITableView
:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
tableView.delegate = self
tableView.dataSource = self
}
// height?
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
//return cellHeightWithoutSeparator + cellSeparatorHeight
//print("YES!")
return 80 // arbitrary
}
// table wants a UITableViewCell for each row
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell
// customize cell here
return cell
}
// how many rows?
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 50 // arbitrary
}
}
表视图的结构为:
因此,如您所见,该单元格包含一个按钮。
我希望按钮(或作为单元格子视图的任何可单击视图)立即响应触地事件,因此我在情节提要的ScrollView属性检查器中未选中“延迟触地”。
据我了解,取消选中该框等同于代码:
tableView.delaysContentTouches = false
根据docs,此方法应该适用于IOS 2.0 +
但是将该属性设置为true或false只能在IOS 11和12上按预期方式工作,但是在IOS 10(可能是更早的版本)上,就好像从未取消选中该框并且对按钮的触摸仍然被延迟
我了解仍然可以在单元格中将视图设为“可点击”,并立即对“在内部进行触摸”做出响应(因为触摸事件将取消触摸的延迟),但是我仍然希望触摸 down 事件立即调用(在所有iOS版本上,不仅是11+),因为:
1)我希望重新排序控件立即响应。
2)我希望单元格中的视图具有正常的/即时的触地视觉反馈。
我还咨询了4年前写的this similar, but not the same, question,并尝试应用答案,但是这些答案似乎都不适用于该问题的现代原因。
有人知道原因吗?(最好是Swift)解决方案?