我正在使用Swift 2.3和Xcode 8 Beta 1将我的应用更新到iOS10,我发现有一个UITableViewHeaderFooterContentView
阻止了我的子类{{1}上的UIButton的触摸}。
在Xcode 8 Beta 1模拟器上,UIButton适用于iOS9.3但不适用于iOS10。
1)有没有这方面的文件?
2)如何确保我的UI元素位于iOS10中的新内容视图之上? (或允许触及UITableViewHeaderFooterView
)
谢谢!
表标题
UITableHeaderFooterContentView
视图控制器中的代码
import UIKit
class TableHeader: UITableViewHeaderFooterView {
@IBOutlet weak var dayLabel: UILabel!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var addNewEventButton: UIButton!
}
是在iOS10中不再接收触摸的UIButton
dateCell.addNewEventButton
答案 0 :(得分:6)
违规视图实际上是contentView
的{{1}}(请参阅Apple Docs)。所以你应该只能使用UITableViewHeaderFooterView
来阻止它干扰触摸。
然而,似乎在iOS9下,如果从NIB加载视图,sendSubview(toBack:)
无法正确初始化UITableViewHeaderFooterView
。虽然contentView
属性不是可选的,但它实际上是nil,如果您尝试访问它,则会出现BAD ACCESS错误。你也不能为contentView
设置一个值(在代码中或在IB中作为出口),因为它是一个只读属性(*)。因此,我能想到的唯一解决方案是使用contentView
来有条件地包含将contentView移动到后面的代码(如果您在iOS 10或更高版本上运行)。我会将相关代码放入您的子类中:
#available
(*)沉迷于疯狂猜测,我的猜测是Apple在override func awakeFromNib() {
if #available(iOS 10, *) {
self.sendSubview(toBack: contentView)
}
}
上大量使用UITableViewHeaderFooterView
代码。由于IB在其对象库中有UITableViewCell
(并注意这些包括单元格的UITableViewCells
),因此它可以确保正确实例化单元格的contentView。但由于对象库中没有contentView
,因此无法正确加载UITableViewHeaderFooterView
。看起来他们通过实例化一个空的contentView
在iOS10中修复它。可惜他们也没有将contentView
添加到库中。